博客
关于我
强烈建议你试试无所不能的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://risci.baihongyu.com/

你可能感兴趣的文章
标记一下
查看>>
IP报文格式学习笔记
查看>>
autohotkey快捷键显示隐藏文件和文件扩展名
查看>>
Linux中的进程
查看>>
学习python(1)——环境与常识
查看>>
学习设计模式(3)——单例模式和类的成员函数中的静态变量的作用域
查看>>
自然计算时间复杂度杂谈
查看>>
当前主要目标和工作
查看>>
使用 Springboot 对 Kettle 进行调度开发
查看>>
一文看清HBase的使用场景
查看>>
解析zookeeper的工作流程
查看>>
搞定Java面试中的数据结构问题
查看>>
慢慢欣赏linux make uImage流程
查看>>
linux内核学习(7)脱胎换骨解压缩的内核
查看>>
以太网基础知识
查看>>
慢慢欣赏linux 内核模块引用
查看>>
kprobe学习
查看>>
慢慢欣赏linux phy驱动初始化2
查看>>
慢慢欣赏linux CPU占用率学习
查看>>
2020年终总结
查看>>