我使用的是TMS320C5416芯片,运行的程序需要读取FSR的引脚电平, 通过xds100仿真器加载程序时功能一切正常,而将.out文件通过hex500转换后,复位dsp芯片,通过mcbsp2加载到芯片中运行时,发现缓冲串口读取的当前引脚状态不对(PCR寄存器FSR和CLKRP都是之前写入的状态),无论当前FSR或CLKR是高电平还是低电平,加载其它的程序(比如将缓冲串口当作通用IO的输出口使用,或者将缓冲串口做SPI接口)都能正常工作,请问问题可能会出现在哪里?
Shine:
FSR管脚配置成IO通用管脚模式才能通过PCR.FSRP位来读取电平值。
当用作mcbsp模式时,FSRP位是用来设置FSR管脚极性的,不是FSR的引脚电平值,FSR的引脚电平需要用示波器测量。
user5322590:
回复 Shine:
感谢您的回复,我在程序里将缓冲串口配为IO模式,通过仿真器加载程序,程序能正常执行,但是通过dsp内置的bootloader从缓冲串口启动后,通过PCR来读取对应的电平就不对了,无论当前引脚是高电平还是低电平,都只会进入引脚低电平的状态,代码如下:voidmain(){…//其他初始化SREGs.McBSPADDR2.SPSA = PCR;SREGs.McBSPADDR2.SPSD.PCR_Regs=0x3000;while(1){SREGs.McBSPADDR2.SPSA = PCR;temp=SREGs.McBSPADDR2.SPSD.PCR_Regs;SREGs.McBSPADDR2.SPSA = PCR;if( 0 == SREGs.McBSPADDR2.SPSD.PCR_Bits.DR_STAT){//通过缓冲串口加载程序后总是进这里,无论DR电平如何SREGs.IMR.Bits.INT3 = 0;}else{//不屏蔽中断,只有通过仿真器加载才能进来SREGs.IMR.Bits.INT3 = 1;SREGs.IFR.Bits.INT3 = 1;}}…//其他逻辑,不会修改PCR
}…//其他中断逻辑,不会修改PCR
Shine:
回复 user5322590:
用仿真器跟一下加载后的代码,看一下PCR寄存器的RIOEN值是多少? 是不是为1—IO模式?
user5322590:
回复 Shine:
您好,就上面的代码,用仿真器加载后temp的值(PCR)读出来是0x300a或0x301f,而用mcbsp加载后,只能读出0x300a,即当前是IO模式
Shine:
回复 user5322590:
如果用其他模式启动,也会有这个问题吗?