嵌入式技术william hill官网
直播中

河神大人

8年用户 1509经验值
擅长:电源/新能源
私信 关注
[问答]

LPC2138跑RT-Thread后不能正常响应外部中断是为什么

问题说明:

该硬件平台在不跑RT-Thread时,可以正常响应外部中断。
移植了RT-Thread后(说是移植,其实就是直接用BSP里面的LPC2148分支,LPC2148兼容LPC2138),按照原来的方式配置好寄存器。
但是就是死活响应不了外部中断。
中断有安装,并且中断有使能。
另外,均可响应定时器0、定时器1产生的中断。

是不是还有什么东西我还没有考虑到?

1.jpg

回帖(5)

杨秀英

2022-8-26 11:42:59
如果可以调试的话,需要看下 NVIC 的配置是不是对的`
举报

河神大人

2022-8-26 11:43:20
上电后在rt_hw_interrupt_init()中就做了如下初始化:(所有中断均配置为向量IRQ中断)

/* initialize VIC*/
    VICIntEnClr = 0xffffffff;
    VICVectAddr = 0;
    /* set all to IRQ */
    VICIntSelect = 0;
在后来的安装中断过程中分配要安装的中断的向量中断号和中断服务程序地址。

上述过程应该是不存在问题的。

外部中断寄存器地址配置为:

//Eint2中断设置
    PINSEL0 |= 0x80000000;    //P0.15为EINT2
    EXTMODE = 0x04;           //用边沿,下降沿
    EXTINT  = 0x04;[/code]
另外在这个BSP中没有可以将一个中断分配为FIQ中断的接口。而且IRQ中断之间不能自行分配优先级,而是按照VIC Channel编号固定了IRQ中断之间的优先级。
举报

杨秀英

2022-8-26 11:43:30
仿真查看irq_desc结构体数组中的值,可以看到中断服务程序的地址分配是正确的。
举报

刘秀英

2022-8-26 11:43:38
应该跟系统无关,一定是硬件初始化问题。
举报

王凯

2022-8-26 11:43:57
原因是因为 BSP 里面写的最大中断号比硬件的要小,导致高位的中断无法响应。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分