最近在搞STM8的IAP,想在Bootloader与APP中都用中断,看来网上的大神说的方案,可以将中断向量重定向到RAM,可是搞了两天仍然没有搞定,按如下的方法,BOOT单独可以正常串口中断(屏蔽了跳转到APP)而BOOT跳转到APP就不能中断,感觉APP中的中断向量重定向有点问题,但是又不知道问题在哪,特来求助各位大神 boot: icf文件 define region NearData = [from 0x0000 to 0x077F]; define region Eeprom = [from 0x4000 to 0x43FF]; define region BootROM = [from 0x6000 to 0x67FF]; define region NearFuncCode = [from 0x8000 to 0xA7FF]; define region FarFuncCode = [from 0x8000 to 0xA7FF]; define region HugeFuncCode = [from 0x8000 to 0xA7FF]; bOOT里的主要代码: #if 1 typedef void(*isr_type_t)(void); typedef struct{ uint16_t interrupt_instuction; isr_type_t interrupt_handler; }interrupt_vector; #pragma location=0x0780 interrupt_vector vector_table_[32]; #endif #pragma vector=23 __interrupt void UART2_RX_IRQ(void) { ........//中断 } void main(void) { vector_table_[23].interrupt_instuction=0x8200; vector_table_[23].interrupt_handler=(isr_type_t)&UART2_RX_IRQ; } APP: icf文件 define region NearData = [from 0x0000 to 0x077F]; define region Eeprom = [from 0x4000 to 0x43FF]; define region BootROM = [from 0x6000 to 0x67FF]; define region NearFuncCode = [from 0xA800 to 0xFFFF]; define region FarFuncCode = [from 0xA800 to 0xFFFF]; define region HugeFuncCode = [from 0xA800 to 0xFFFF]; APP中部分代码 重定向 #pragma location=0x0780 uint32_t vector_table_[32]; vector_table_[0]=0x82008080; for(i=1;i<32;i++) { vector_table_=(0X82000000+0xA800+(i*4)); } |
测试标签123
IAR FOR ARM和IAR FOR STM8无法共存,
STM8L052,液晶内部电源怎么用?
STM8S103飞线外接芯片,I2C不能得到slaveAddress应答,通讯失败。
STM8S105C6T6 UART2串口,能接收数据,不能发送数据
STM8S105K4 串口2 无奇偶校验,也能接收 偶校验的 数据
在STM8S的IAP使用中断和APP使用中断问题
STM8L151 SMBUS设计
STM8S103F复位异常
STM8L的LCD调试时不亮
评分
查看全部评分