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.

TMDSCNCD28388D: SPIA的CLK和SIMO没有输出

Part Number: TMDSCNCD28388D

Hi,我打算在SPI的LoopBack例程的基础上修改得到一个28388与SPIDAC芯片通信的程序,但遇到了一些问题,配置完后SPIA和SIMO两个管脚均没有输出。

下面是我程序的一些配置,程序利用了定时器中断,在每一秒的定时器中断中通过SPI输出一个固定的数。

void main(void)
{
    InitSysCtrl();
    InitGpio();

    init_SPI_A();
    init_SPI_GPIO();

    DINT;    // Disable CPU interrupts

    InitPieCtrl();    // Initialize the PIE control registers to their default state.
    IER = 0x0000;       // Disable CPU interrupts and clear all CPU interrupt flags
    IFR = 0x0000;
    InitPieVectTable();    // Initialize the PIE vector table with pointers to the shell Interrupt

    EALLOW;
    PieVectTable.TIMER0_INT = &cpuTimer0ISR;        // Map ISR functions
    EDIS;

    InitCpuTimers();    // Initialize the Device Peripheral. For this example, only initialize the Cpu Timers.
    ConfigCpuTimer(&CpuTimer0, 200, 1000000);    // Configure CPU-Timer 0: 200MHz CPU Freq, 1 second Period (in uSeconds)

    //
    // To ensure precise timing, use write-only instructions to write to the
    // entire register. Therefore, if any of the configuration bits are changed
    // in ConfigCpuTimer and InitCpuTimers, the below settings must also be
    // be updated.
    //
    CpuTimer0Regs.TCR.all = 0x4000;
    IER |= M_INT1;    // Enable CPU int1 which is connected to CPU-Timer 0
    PieCtrlRegs.PIEIER1.bit.INTx7 = 1;      // Enable TINT0 in the PIE: Group 1 interrupt 7

    EINT;    // Enable global Interrupts
    ERTM;    //Enable higher priority real-time debug events

    while(1);
}

__interrupt void cpuTimer0ISR(void)
{
    CpuTimer0.InterruptCount++;
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;    // Acknowledge this interrupt to receive more interrupts from group 1

    DacOutData(0xaaaa);
}

void DacOutData(uint16_t data)
{
    SpiaRegs.SPITXBUF = (data);
    (void)SpiaRegs.SPIRXBUF;
    SpiaRegs.SPITXBUF = (data<<8);
    (void)SpiaRegs.SPIRXBUF;
}

void init_SPI_GPIO(void)
{
    EALLOW;
    GpioCtrlRegs.GPAPUD.bit.GPIO16=0;           //Enables the Pull-up Resister
    GpioCtrlRegs.GPAGMUX2.bit.GPIO16=0;         //configure GPIO16 as SPIASIMO
    GpioCtrlRegs.GPAMUX2.bit.GPIO16=1;

    GpioCtrlRegs.GPAPUD.bit.GPIO17=0;
    GpioCtrlRegs.GPAGMUX2.bit.GPIO17=0;
    GpioCtrlRegs.GPAMUX2.bit.GPIO17=1;          //configure GPIO17 as SPIASOMI

    GpioCtrlRegs.GPAPUD.bit.GPIO18=0;
    GpioCtrlRegs.GPAGMUX2.bit.GPIO18=0;
    GpioCtrlRegs.GPAMUX2.bit.GPIO18=1;          //configure GPIO18 as SPISCK

    GpioCtrlRegs.GPBPUD.bit.GPIO35=0;
    GpioCtrlRegs.GPBGMUX1.bit.GPIO35=0;          //configure GPIO35 as GPIO (signal /LOAD)
    GpioCtrlRegs.GPBMUX1.bit.GPIO35=0;
    GpioCtrlRegs.GPBDIR.bit.GPIO35 = 1;

    GpioCtrlRegs.GPBPUD.bit.GPIO37=0;
    GpioCtrlRegs.GPBGMUX1.bit.GPIO37=0;          //configure GPIO37 as GPIO (signal /FRE)
    GpioCtrlRegs.GPBMUX1.bit.GPIO37=0;
    GpioCtrlRegs.GPBDIR.bit.GPIO37 = 1;
    GpioDataRegs.GPBSET.bit.GPIO37 = 1;          //Pull up  /FRE

    GpioCtrlRegs.GPBPUD.bit.GPIO60=0;
    GpioCtrlRegs.GPBGMUX2.bit.GPIO60=0;          //configure GPIO60 as GPIO (signal FS)
    GpioCtrlRegs.GPBMUX2.bit.GPIO60=0;
    GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;

    EDIS;
}

// SPI moduleA initialization
void init_SPI_A(void)
{
    EALLOW;
    DevCfgRegs.CPUSEL6.bit.SPI_A = 0;     //Connect SPIA to CPU1,The code generation will default SPIA to CPU2 and fail to initialize.More information See 28388 UserGuide Page 424
    CpuSysRegs.PCLKCR8.bit.SPI_A = 1;
    EDIS;

    EALLOW;
    //InitSysCtrl();
    SpiaRegs.SPIFFTX.all = 0xE040;          //FIFO
    SpiaRegs.SPIFFCT.all = 0x0;

    SpiaRegs.SPICCR.bit.SPISWRESET=0;

    SpiaRegs.SPICTL.bit.MASTER_SLAVE=1;              //Master Mode
    SpiaRegs.SPICCR.bit.CLKPOLARITY=0;
    SpiaRegs.SPICTL.bit.CLK_PHASE=0;
    SpiaRegs.SPICCR.bit.SPICHAR=7;                   //16 bit SPI
    SpiaRegs.SPIBRR.bit.SPI_BIT_RATE=0x7f;              //Set baud Rate

    SpiaRegs.SPICTL.bit.TALK=1;                      //Enable transmit
    SpiaRegs.SPIPRI.bit.FREE=1;

    SpiaRegs.SPICCR.bit.SPISWRESET=1;
    EDIS;

}

调试中,定时器中断能正常触发,我不确定我代码的配置哪一块出了问题