博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
终于 整明白了中断的工作原…
阅读量:4051 次
发布时间:2019-05-25

本文共 1607 字,大约阅读时间需要 5 分钟。

原文地址:
作者:
 

ARM C中中断程序和其他的c的中断程序一样,就是有中断向量表,入口地址,中断应用程序三部分组成

//中断向量表

// ISR

#define pISR_RESET     (*(unsigned *)(_ISR_STARTADDRESS+0x0))
#define pISR_UNDEF     (*(unsigned *)(_ISR_STARTADDRESS+0x4))
#define pISR       (*(unsigned *)(_ISR_STARTADDRESS+0x8))
#define pISR_PABORT    (*(unsigned *)(_ISR_STARTADDRESS+0xc))
#define pISR_DABORT    (*(unsigned *)(_ISR_STARTADDRESS+0x10))
#define pISR_RESERVED  (*(unsigned *)(_ISR_STARTADDRESS+0x14))
#define pISR_IRQ       (*(unsigned *)(_ISR_STARTADDRESS+0x18))
#define pISR_FIQ       (*(unsigned *)(_ISR_STARTADDRESS+0x1c))
//中断初始话

void Isr_Init(void)

{
    pISR_UNDEF=(unsigned)HaltUndef;/
    pISR  =(unsigned)Hal;
    pISR_PABORT=(unsigned)HaltPabort;
    pISR_DABORT=(unsigned)HaltDabort;
    rINTMOD=0x0;   // All=IRQ mode
    rINTMSK=BIT_ALLMSK;   // All interrupt is masked.

    //pISR_URXD0=(unsigned)Uart0_RxInt;

    //rINTMSK=~(BIT_URXD0);   //enable UART0 RX Default value=0xffffffff

#if 1

    pISR_USBD =(unsigned)IsrUsbd;
    pISR_DMA2 =(unsigned)IsrDma2;
#else
    pISR_IRQ =(unsigned)IsrUsbd;
     //Why doesn't it receive the big file if use this. (???)
     //It always stops when 327680 bytes are received.
#endif    
    ClearPending(BIT_DMA2);
    ClearPending(BIT_USBD);
    //rINTMSK&=~(BIT_USBD);  
  
    //pISR_FIQ,pISR_IRQ must be initialized
}

//具体中断函数

void HaltUndef(void)
{
    Uart_Printf("Undefined instruction exception!!!\n");
    while(1);
}

 

自己从一开始 接触arm,就听说了中断 ,同时也见到了以上类似代码,准确来说可以追溯到去年暑假,至于在本科时也在教科书上好象见过就不说了,呵呵。一直没有搞明白到底是怎么回事,直到昨天晚上看到这个例子 ,再加上前段时间看了 c epert programing 对c语言有了进一步的了解,终于搞明白了。呵呵 回首往事 ,发现关键在于,以前不明白 同一个数 在左是址,在右是值,所以上面pISR_UNDEF=(unsigned)HaltUndef;是把HaltUndef地址值 存放到(*(unsigned *)(_ISR_STARTADDRESS+0x4))这个地址中 呵呵 现在 总算拨开云雾见天日,其他相关问题便迎任而解了

转载地址:http://wssci.baihongyu.com/

你可能感兴趣的文章
python_time模块
查看>>
python_configparser(解析ini)
查看>>
selenium学习资料
查看>>
<转>文档视图指针互获
查看>>
从mysql中 导出/导入表及数据
查看>>
HQL语句大全(转)
查看>>
几个常用的Javascript字符串处理函数 spilt(),join(),substring()和indexof()
查看>>
javascript传参字符串 与引号的嵌套调用
查看>>
swiper插件的的使用
查看>>
layui插件的使用
查看>>
JS牛客网编译环境的使用
查看>>
9、VUE面经
查看>>
关于进制转换的具体实现代码
查看>>
Golang 数据可视化利器 go-echarts ,实际使用
查看>>
mysql 跨机器查询,使用dblink
查看>>
mysql5.6.34 升级到mysql5.7.32
查看>>
dba 常用查询
查看>>
Oracle 异机恢复
查看>>
Oracle 12C DG 搭建(RAC-RAC/RAC-单机)
查看>>
Truncate 表之恢复
查看>>