求助~关于中断函数`

wsspzwps 2007-05-18 05:12:19
哪位大哥能给我一个关于中断函数的使用细则及其方法、例子?~感激不尽~!
...全文
540 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
huashizhixin 2007-06-12
  • 打赏
  • 举报
回复
大概是这样的,要涉及具体的硬件:
INT_VECTOR vector[]={
/* interrupt number, handler */
{ INT_NULL, NULL },
{ INT_NULL, NULL },
{ INT_EXT0, NULL },
{ INT_EXT1, NULL },
{ INT_EXT2, NULL },
{ INT_EXT3, NULL },
{ INT_EXT4, NULL },
{ INT_EXT5, NULL },
{ INT_EXT6, NULL },
{ INT_EXT7, NULL },
{ INT_EXT8, NULL },
{ INT_EXT9, NULL },
{ INT_EXT10, NULL },
{ INT_EXT11, NULL },
{ INT_EXT12, NULL },
{ INT_EXT13, NULL },
{ INT_EXT14, NULL },
{ INT_NONE, NULL },
{ INT_EXT15, NULL },
{ INT_EXT16, NULL },
{ INT_EXT17, NULL },
{ INT_LCD, NULL },
{ INT_AC97, NULL },
{ INT_PWM, NULL },
{ INT_UART1, NULL },
{ INT_UART0, NULL },
{ INT_MMC, NULL },
{ INT_SPI, NULL },
{ INT_USB, NULL },
{ INT_GPT, NULL },
{ INT_EMI, NULL },
{ INT_DMA, NULL },
{ INT_RTC, NULL },
};

extern void int_vector_handler(void)
{
U32 intnum;
U8 i = 0;

intnum = *(RP)(INTC_IFSTAT);
while(intnum != 0)
{
intnum = intnum>>1;
i++;
}
(*vector[i].handler)();

return;
}
zengya 2007-06-12
  • 打赏
  • 举报
回复
setvect(int 中断号,void interrupt(*中断函数名))
这个函数只能设置中断号,能不能直接设置中断号所表示的地址空间????
fishlovecat 2007-05-19
  • 打赏
  • 举报
回复
中断 用汇编去写的
suyouxin 2007-05-18
  • 打赏
  • 举报
回复
中断和汇编是不相干的东西。。

中断函数就是一个函数而已,就是发生中断时调用的函数。
而中断可以软件触发或者硬件出发,因为中断向量表地址一般是固定的,所以发生中断时,CPU可以直接跳去执行事先设置好的中断函数
wsspzwps 2007-05-18
  • 打赏
  • 举报
回复
我对汇编不了解,能说的详细些吗?~谢啦~!
jixingzhong 2007-05-18
  • 打赏
  • 举报
回复
setvect()设置中断向量函数

  setvect(int 中断号,void interrupt(*中断函数名))

  功能:把中断服务程序的地址装入中断向量表中。

  调用方法:setvect(中断号,中断函数名即地址);



  (1)得预先定义要代替原函数的新函数

  void interrupt 中断函数名(void)

  {......}

  (2)得先保留原中断函数地址

  void interrupt (*保留函数名)(void);

  保留函数名=getvect(中断号);

  (3)事后得将原中断函数地址装回向量表中

  setvect(中断号,保留函数名);
todototry 2007-05-18
  • 打赏
  • 举报
回复
汇编么,你说
freshui 2007-05-18
  • 打赏
  • 举报
回复
....

这可是老硬的东西 :)
应该去嵌入式那边问问吧

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧