Hello,
我看TRM里面说到,VIM可以Map不同的中断需求,并且数字越小的Priority越高。
我查了一下,似乎是要去修改CHANCTRL寄存器。
同时Halocogen里面的说明,有个内建函数vimChannelMap()如下,
要如何使用呢?可否举个例子。它的第三个引数"handler"是要给什麽数值呢?
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.
Hello,
我看TRM里面说到,VIM可以Map不同的中断需求,并且数字越小的Priority越高。
我查了一下,似乎是要去修改CHANCTRL寄存器。
同时Halocogen里面的说明,有个内建函数vimChannelMap()如下,
要如何使用呢?可否举个例子。它的第三个引数"handler"是要给什麽数值呢?
Hello Ken,
我使用RTI和PWM1的中断,并试著把channel2和channel90的中断对调,使用如下的指令
vimChannelMap(2, 90, &etpwm1Interrupt);
vimChannelMap(90, 2, &rtiCompare0Interrupt);
但结果并不对,我在两个ISR中各设一个breakpoint,但无论如何,仍然是跑到RTI的ISR,
而非PWM的ISR,可见PWM的priority并没有被对换过来。
另外你说的handler 终端处理函数的地址,是否指的就是我上面的&etpwm1Interrupt和&rtiCompare0Interrupt呢?
shunfan,
我稍后测试一下,有结果的话,给你一个更新。
谢谢
Shunfan,
我刚做了一个测试,关于Vim channel map的问题,应该是这样理解的:
首先它实现的是将一个interrupt的request和原本不属于它的channel mapping起来。
我用下面的语句:
// hetInit();
rtiInit();
rtiEnableNotification(rtiNOTIFICATION_COMPARE0);
//pwmEnableNotification(hetREG1,pwm0,pwmEND_OF_PERIOD);
vimChannelMap(2,24,&het1LowLevelInterrupt);
rtiStartCounter(rtiCOUNTER_BLOCK0);
// pwmStart(hetRAM1,pwm0);
_enable_IRQ();
可以实现将RTI的中断响应channel mapping到了HET pwm中断的channel上,需要注意的是,这个时候,我没有配置RTI compare0的中断channel,同时也没有使能het模块。
这样的操作,能够实现将系统默认的低优先级channel mapping到不同的channel上面去。同时它自身的channel应该关掉,不然两个中断响应函数都会响应。
谢谢
Hello Ken,
谢谢你的帮忙,我想再跟你求证一件事,
照你这个测试,把RTI的中断 mapping 到 channel 20。
那原本在中断响应函数中的指令是否要移动到het1low的中断响应函数里呢?
或是留在原本的RTI的中断响应函数?
shunfan,
需要移到hetlow的相应函数里面去,因为mapping过后,RTI自身的中断响应函数已经不会再执行了。
谢谢
您好,我想请问一下关于VIM RAM区间的映射问题。
在halcogen软件中通道ch的中断服务程序存放的偏移地址为(ch+1)*4的空间,例如ESM中断的通道号为0,但其中断服务程序存放在0xFFF82004地址空间;RTCOMPARE1中断通道号为3,但中断服务程序存放在0xFFF82010地址空间。
但我在uc/os官网上下载的uc/os操作系统,通道ch的中断服务程序存放的偏移地址为(ch)*4的空间,例如RTCOMPARE1中断通道号为3,但中断服务程序存放在0xFFF82008地址空间。在这种情况下,也能正常响应中断。
另外CHANCTRL寄存器的值为复位默认值,即CHANMAP(ch)=ch
这是为什么呢?