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.

如何改变VIM的Priority

Other Parts Discussed in Thread: HALCOGEN

Hello,

我看TRM里面说到,VIM可以Map不同的中断需求,并且数字越小的Priority越高。

我查了一下,似乎是要去修改CHANCTRL寄存器。

同时Halocogen里面的说明,有个内建函数vimChannelMap()如下,

要如何使用呢?可否举个例子。它的第三个引数"handler"是要给什麽数值呢?

  • shunfan,

    这个handler应该对应的是终端处理函数的地址,这个在sys_vim.c的初始化操作里面有。

    关于例子,我倒还真没做过,不过你可以试试看。这个函数的例程的作用就是改变默认的中断channel request number对应的channel number。

    谢谢

  • 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


    这是为什么呢?

  • yuyin,

       首先我印象中uc/os的例程里面有关于HCG生成的文件,里面sys_vim.c里面定义的中断入口地址应该没有变化吧。

    不过退一步说,这个即使改变了也没什么关系,因为VIm的channel都是可以用户自定义的,只要你确定中断的相应程序是你自己需要的就行,具体哪个channel不是很重要。

    谢谢

    ken