11buzzer_50000000.zip

  • 四夕
    了解作者
  • Unix_Linux
    开发工具
  • 5KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 2
    下载次数
  • 2013-07-01 16:29
    上传日期
Linux裸板的蜂鸣器驱动,基于S3C6410的,学习过程中亲自验证可行,大家需要可以参考一下。
11buzzer_50000000.zip
  • 11buzzer_50000000
  • ld.lds
    165B
  • do_irq.c
    1.1KB
  • common.h
    156B
  • timer.c
    542B
  • Makefile
    480B
  • regs.h
    13.5KB
  • start.s
    260B
  • main.c
    120B
内容介绍
#include "regs.h" #include "common.h" void do_irq(void) { void (*handler)(void) = NULL;//函数指针,函数的地址 if(VIC0ADDRESS)//这两个寄存器只能有一个非0 { handler = (void *)VIC0ADDRESS; } else if(VIC1ADDRESS) { handler = (void *)VIC1ADDRESS; } VIC0ADDRESS = 0; VIC1ADDRESS = 1; if(handler) { handler(); } handler = 0; } int irq_request(int num, void (*handler)(void))//用于设置enable和select以及对应的中断处理号(num)对应的中断处理函数(handler)地址放到相应的中断处理寄存器中 { if(num >= 0 && num <= 31) { VIC0INTENABLE |= 1 << num; VIC0INTSELECT &= ~(1 << num); VIC0VECTADDR[num] = (unsigned int)handler; } else if(num >= 32 && num <= 63) { num -= 31; VIC1INTENABLE |= 1 << num; VIC1INTSELECT &= ~(1 << num); VIC1VECTADDR[num] = (unsigned int)handler; } else { return -1; } __asm__ __volatile__( "mrs r0,cpsr\n" //读cpsr的值 //"and r0,r0,#0xffffff7f\n" //修改,将cpsr第7位置0 ,其他位不变 "bic r0,r0,#0x80\n" //修改,将cpsr第7位置为0 "msr cpsr,r0\n" //写入修改后的cpsr的值 ); return 0; }
评论
    相关推荐