This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
在尝试将基于 C2000Ware/driverlib 编写的应用程序与基于 Motorware/HAL 的 Lab05d 进行合并时、我一直在调试获取非法 ISR 的问题。 在整个过程中、我的头被捆绑在节点调试中、我被卡住的地方之一是使用 PieVector 表、因为 HAL 保持它自己的矢量表、C2000ware 有它自己的矢量表。
调试和研究:
void HAL_enableAdcInts (HAL_Handle handle){HAL_Obj * obj =(HAL_Obj *) handle;//启用与 ADC 中断关联的 PI_enableAdcInts (obj->压 Handle、ADC_IntNumber_1);//启用 ADC 中断 ADC_enableInt (obj->adableAdcIntle_interrupts); //启用 ADC_Int 1 interrupts、ADC_Int、ADC_Int、ADC_Int、intrint 函数1、ADC_Int、ine_interrupt (obj_enable_intle_intle_intt) PIE_Obj * PIE =(PIE_Obj *)压电式; uint16_t 索引; uint16_t setValue; if (intNumber < ADC_IntNumber_9) { 索引= 9; SetValue = 1 << intNumber; } 否则、如果(intNumber = ADC_IntNumber_9) { 索引= 0; SetValue = 1 << 5; } 其他 { 索引= 0; SetValue = 1<<(intNumber & 0x07)-1); } //设置值 PIe->PIEIER _PIEIFR[index].IER |= setValue; return; }// PIE_enableAdcInt()函数 typedef 枚举结束 { ADC_IntNumber_1_0、 //!<表示 ADCINT1 ADC_IntNumber_2、 //!<表示 ADCINT2 ADC_IntNumber_3、 //!<表示 ADCINT3 ADC_IntNumber_4、 //!<表示 ADCINT4 ADC_IntNumber_5、 //!<表示 ADCINT5 ADC_IntNumber_6、 //!<表示 ADCINT6 ADC_IntNumber_7、 //!<表示 ADCINT7 ADC_IntNumber_8、 //!<表示 ADCINT8 ADC_IntNumber_9、 //!<表示 ADCINT9 ADC_IntNumber_1HP、 //!<表示 ADCINT1与 PIE_enableAdcInt ()一起使用的高优先级仅 为 ADC_IntNumber_2HP、 //!<表示 ADCINT2高优先级、仅与 PIE_enableAdcInt()搭配使用 ADC_IntNumber_9HP=0xE //!<表示 ADCINT9高优先级仅与 PIE_enableAdcInt()一起使用 } ADC_IntNumber_e;
在给定上下文中、索引= 9且 setValue = 1、
以下内容:
PIe->PIEIER _PIEIFR[index].IER |= setValue;
变为
PIE->PIEIER-PIEIFR[9].IER |= 1;
根据 spruh18g、1.7.4 PIE 配置寄存器:
PIEIER9 0x0000 - 0CF2 1 PIE、INT9组启用寄存器
但是、根据表1-120。 PIE 矢量表:
PIE 组9矢量-多路复用为 CPU INT9
SCI-x 和 CAN-x 中断。
我无法清楚地看到这是如何工作的。 很可能、我在这里遗漏了一些东西。 是否有人可以澄清?
谢谢、
制造商