能够在rtems上运行stm32后就一直在纠结于驱动的问题,rtems的驱动层依赖于文件系统而文件系统对于一个单片机来说还是太消耗资源,于是就着手移植了自己的驱动层,但是由于一直没将NVIC这里吃透结果在这里纠结了很久,下面记录一下解决NVIC问题的关键点。
1、cortex-m3内核是允许vector table运行在ram中但是需要在程序初始化时对vector table重新定位,这点在rtems的irq.c文件中
bsp_interrupt_facility_initialize函数中有具体代码
2、设置BSP_INTERRUPT_VECTOR_MAX参数为83在stm32中系统有83个外部中断
3、在驱动中需要使用具体的中断函数时需要先配置驱动的优先级和中断函数重定向
_ARMV7M_Set_exception_priority(TIM6_IRQn+16,0x02);
_ARMV7M_Set_exception_handler(TIM6_IRQn+16,TIM6_IRQHandler);
这里之所以需要和+16是由于系统重定向中断函数时的偏移是按中断绝对索引定位的。
之后的驱动代码与在keil下没有太大区别