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.

c5416通过mcbsp2加载程序并启动后将缓冲串口当作通用io时读取电平不对

我使用的是TMS320C5416芯片,运行的程序需要读取FSR的引脚电平, 通过xds100仿真器加载程序时功能一切正常,而将.out文件通过hex500转换后,复位dsp芯片,通过mcbsp2加载到芯片中运行时,发现缓冲串口读取的当前引脚状态不对(PCR寄存器FSR和CLKRP都是之前写入的状态),无论当前FSR或CLKR是高电平还是低电平,加载其它的程序(比如将缓冲串口当作通用IO的输出口使用,或者将缓冲串口做SPI接口)都能正常工作,请问问题可能会出现在哪里?

  • FSR管脚配置成IO通用管脚模式才能通过PCR.FSRP位来读取电平值。

    当用作mcbsp模式时,FSRP位是用来设置FSR管脚极性的,不是FSR的引脚电平值,FSR的引脚电平需要用示波器测量。
  • 感谢您的回复,我在程序里将缓冲串口配为IO模式,通过仿真器加载程序,程序能正常执行,但是通过dsp内置的bootloader从缓冲串口启动后,通过PCR来读取对应的电平就不对了,无论当前引脚是高电平还是低电平,都只会进入引脚低电平的状态,代码如下:
    void main(){
    ...//其他初始化
    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
  • 用仿真器跟一下加载后的代码,看一下PCR寄存器的RIOEN值是多少? 是不是为1---IO模式?
  • 您好,就上面的代码,用仿真器加载后temp的值(PCR)读出来是0x300a或0x301f,而用mcbsp加载后,只能读出0x300a,即当前是IO模式
  • 如果用其他模式启动,也会有这个问题吗?