F28335,在初始化的时候 什么RPWM 什么ADC等等,这些寄存器值的配置完全正确;就是说我给寄存器配多少,它就是多少
但是,当我给F28335的ECAP寄存器配置的时候,ECAP所有的寄存器全部配置不了; 无论是否加了EALLOW等,ECAP的寄存器死活就配置不了,基本上全部为0,一直是0,死活都不给配置!!!!!!!!
是不是有可能DSP坏了???????
任何一个ECAP的寄存器都配置不了,全都是默认值,怎么改都改不了??
请问 这是为什么呢》》???
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.
看看ECAP的外设时钟打开没有。具体在InitSysCtrl()里void InitPeripheralClocks(void)有没有这么几句话
SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 1; // eCAP3
SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK = 1; // eCAP4
SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK = 1; // eCAP5
SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK = 1; // eCAP6
SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1; // eCAP1
SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK = 1; // eCAP2
你好。
关于C2000系列的芯片,如果有寄存器配置不上的问题,可能是由如下几个原因:
(1)外设的CLOCK没有打开。每一个外设都对应一个CLK的使能信号,如果CLK不打开的话,配置该外设所有的寄存器都无效;针对该问题,请确认SysCtrlRegs.PCLKCR1.bit.ECAPxENCLK是否有配置成使能状态;
(2)所有的EALLOW保护的寄存器在配置之前,要先进入EALLOW状态,配置完毕之后,要EDIS。对于ECAP来说,没有寄存器是EALLOW保护的,所以,基本上不用考虑这个问题;
(3)有的寄存器是无能写入的,或者是写1清零的那种,对于这种寄存器,即使对寄存器赋值,也不会改变寄存器的内容。
不知道你是如何得知寄存器不能配置的,但是针对你的情况,我觉得很有可能是你的ECAP的CLK没有打开导致的。
另外,下面附着我在应用中使用的ECAP1的配置代码,用于产生交流市电过零中断,以此来计算市电的频率:
void sInitECap(void)
{
ECap1Regs.ECEINT.all = 0x0000; // Disable all capture interrupts
ECap1Regs.ECCLR.all = 0xFFFF; // Clear all CAP interrupt flags
ECap1Regs.ECCTL1.bit.CAPLDEN = 0; // Disable CAP1-CAP4 register loads
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0; // Make sure the counter is stopped
// Configure peripheral registers
ECap1Regs.ECCTL1.bit.PRESCALE = 0; //BYPASS THE prescaler
ECap1Regs.ECCTL2.bit.CAP_APWM = 0; //capture mode
ECap1Regs.ECCTL2.bit.CONT_ONESHT = 1; // Oneshot mode
ECap1Regs.ECCTL1.bit.CAP1POL = 1; // Falling edge
ECap1Regs.ECCTL1.bit.CAP2POL = 1; // Falling edge
ECap1Regs.ECCTL1.bit.CAP3POL = 1; // Falling edge
ECap1Regs.ECCTL1.bit.CAP4POL = 1; // Falling edge
ECap1Regs.ECCTL1.bit.CTRRST1 = 0; // Don't reset the counter
ECap1Regs.ECCTL1.bit.CTRRST2 = 0; // Don't reset the counter
ECap1Regs.ECCTL1.bit.CTRRST3 = 0; // Don't reset the counter
ECap1Regs.ECCTL1.bit.CTRRST4 = 0; // Don't reset the counter
ECap1Regs.ECCTL2.bit.SYNCI_EN = 0; // Disable sync in
ECap1Regs.ECCTL2.bit.SYNCO_SEL = 0; // Pass through
ECap1Regs.ECCTL1.bit.CAPLDEN = 1; // Enable capture loads
ECap1Regs.ECCTL2.bit.STOP_WRAP = 1;
ECap1Regs.ECCTL2.bit.REARM = 1;
ECap1Regs.ECEINT.bit.CEVT1 = 1; // CAP1 trigger the interrupt
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1; // Start Counter
}