F28335,在初始化的时候 什么RPWM 什么ADC等等,这些寄存器值的配置完全正确;就是说我给寄存器配多少,它就是多少
但是,当我给F28335的ECAP寄存器配置的时候,ECAP所有的寄存器全部配置不了; 无论是否加了EALLOW等,ECAP的寄存器死活就配置不了,基本上全部为0,一直是0,死活都不给配置!!!!!!!!
是不是有可能DSP坏了???????
任何一个ECAP的寄存器都配置不了,全都是默认值,怎么改都改不了??
请问 这是为什么呢》》???
Victor Zheng:
看看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
F28335,在初始化的时候 什么RPWM 什么ADC等等,这些寄存器值的配置完全正确;就是说我给寄存器配多少,它就是多少
但是,当我给F28335的ECAP寄存器配置的时候,ECAP所有的寄存器全部配置不了; 无论是否加了EALLOW等,ECAP的寄存器死活就配置不了,基本上全部为0,一直是0,死活都不给配置!!!!!!!!
是不是有可能DSP坏了???????
任何一个ECAP的寄存器都配置不了,全都是默认值,怎么改都改不了??
请问 这是为什么呢》》???
Young Hu:
如果怀疑DSP坏了,可以下载个ECAP的例程试试。。比对下,您的程序与例程的初始化部分的区别是什么
F28335,在初始化的时候 什么RPWM 什么ADC等等,这些寄存器值的配置完全正确;就是说我给寄存器配多少,它就是多少
但是,当我给F28335的ECAP寄存器配置的时候,ECAP所有的寄存器全部配置不了; 无论是否加了EALLOW等,ECAP的寄存器死活就配置不了,基本上全部为0,一直是0,死活都不给配置!!!!!!!!
是不是有可能DSP坏了???????
任何一个ECAP的寄存器都配置不了,全都是默认值,怎么改都改不了??
请问 这是为什么呢》》???
Vieri Xue:
你好。
关于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 }