TI中文支持网
TI专业的中文技术问题搜集分享网站

关于C6713B CSR寄存器的 PGIE位

PGIE 位 意义是什么?使用中断时需要程序员对它进行什么操作?对GIE位,可以用API函数 IRQ_globalEnable 进行置1;

那么PGIE位有没有API函数呢,没有找到。需要对 PGIE位进行设置吗?看了几个例子,使用中断时,好像没PGIE 位什么事,

期待您的解释,谢谢

Shine:

PGIE是自动保存GIE位的值, 不需要手动设置. PGIE的作用的具体描述, 请参考下面文档第405页5.2 Globally Enabling and Disabling Interrupts.http://www.ti.com/lit/ug/spru733a/spru733a.pdf

ha zhang:

回复 Shine:

谢谢您的回复,但是 这个文档 41页,这样描述PGIE位

0  Disables saving GIE bit when an interrupt is taken.1  Enables saving GIE bit when an interrupt is taken.

如果是 0 的话,在中断产生时,就不会保存GIE的值,按这个说明,应该把它首先置1的吧,这是一个R/W类型的寄存器?

还有就是对于Core 寄存器,CSR,用C语言怎么读写它?

谢谢

Shine:

回复 ha zhang:

这个是可读写寄存器, 如果你要实现自动保存GIE到PGIE, 就要在CSR中使能PGIE这一位.

CSR不是memory map寄存器, 所以没有寄存器地址, 需要用MVC指令来访问, 如下面文档第635页上的例子.http://www.ti.com/lit/ug/sprufe8b/sprufe8b.pdf如果您用C语言的话, 可以调用rts库中的内嵌函数, 见下面文档第225页.http://www.ti.com/lit/ug/spru187u/spru187u.pdfunsigned int _disable_interrupts ( );unsigned int _enable_interrupts ( );void _restore_interrupts (unsigned int);

ha zhang:

回复 Shine:

非常非常感谢您的回复

(1)可是我觉得,unsigned int _disable_interrupts ( );                  unsigned int _enable_interrupts ( );                 void _restore_interrupts (unsigned int);

并不能实现对PGIE的读写,按道理,应该首先 置GIE=1,而且PGIE=1,能否举个例子,应该怎么写使之置1,用C;

(2)下面是一个C6713B的例程 ,用了两个中断,没有看到任何对PGIE位的操作,按照datasheet上的解释,PGIE默认是0,那么下面的一个中断执行时,GIE就会置0,由于PGIE=0,所以不会保存之前的GIE,中断退出后,GIE会一直为0,就不会再响应后边的中断;但是实际情况并不是这样,还会响应后边的中断,所以对PGIE位比较困惑。

  main()

{

IRQ_setVecs(vectors);        /* point to the IRQ vector table    */   IRQ_globalEnable();           /* enable global interrupt request */   IRQ_nmiEnable();               /* Enable NMI interrupt             */

  IRQ_map(IRQ_EVT_EXTINT4,ExternalInt4Number);   IRQ_map(IRQ_EVT_EXTINT5,ExternalInt5Number);

IRQ_reset(IRQ_EVT_EXTINT4);   IRQ_reset(IRQ_EVT_EXTINT5);

 IRQ_enable(IRQ_EVT_EXTINT4);   IRQ_enable(IRQ_EVT_EXTINT5);

 while(1);

}

/*  ————-external interrupt service routine———*/interrupt voidExtInt4(void){    IRQ_clear(IRQ_EVT_EXTINT4);        //清中断    * PCE2=3;                        //测试代码    return;}interrupt voidExtInt5(void){    IRQ_clear(IRQ_EVT_EXTINT5);        //清中断    * PCE2=4;                        //测试代码    return;}

(3)datasheet(SPRU733A  405页)这样说,PGIE=1时,当中断产生时会保存GIE的值,然后,中断结束后,返回GIE的值,然后PGIE再清0,

那么问题来了,PGIE清0了,当中断再次产生时,还怎么保存下一次的GIE值??

赞(0)
未经允许不得转载:TI中文支持网 » 关于C6713B CSR寄存器的 PGIE位
分享到: 更多 (0)