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.

[参考译文] CCS/TMS320F2.8377万S:SPI和SCI之间的冲突

Guru**** 2224410 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/615694/ccs-tms320f28377s-conflict-between-spi-and-sci

部件号:TMS320F2.8377万S

工具/软件:Code Composer Studio

我写两个函数来使用UART和SPI端口。 当他们在主函数中调用时,UART上的数据已损坏,否则它们工作正常(如果我一次使用任何一个)。

我使用GPIO89,GPIO90 (用于UART)和GPIO 58,GPIO60 (用于SPI)。

所以请帮我找出问题所在??

/************************************************************************ 工商局局长****************************************************************************************************** /

void init_serial_c (void)

GPIO_SetupPinMux (89,GPIO _MUX_CPU1,6);
GPIO设置PIN选项(89,GPIO输出,GPIO _异步);

GPIO_SetupPinMux (90,GPIO _MUX_CPU1,6);
GPIO设置引脚选项(90,GPIO输入,GPIO按钮);


EALLOW;//这是写入EALLOW保护寄存器所必需的

PieVectorTable.SCIC_RX_INT =&sciaRxFifoIsr;
// PieVectorTable.SCIC_TX_INT =&scicTxFifoIsr;
EDIS;//这是禁用写入EALLOW保护寄存器所必需的

INIT_SCIC_GPIO ();
EALLOW;

PieCtrlRegs.PIECTRL.bit.ENPIE =1;//启用PIE块
PieCtrlRegs.PIEIER8.bit.INTx5 =1;// PIE组9,INT1 Rx中断启用
//PieCtrlRegs.PIEIER8.bit.INTx6=1;// PIE组9,INT2 TX中断启用

scic_echoback_init();
scic_fifo_init();

IER || M_INT8;
//IER = 0x100;//启用CPU INT
//EINT;
EINT;
ERTM;
EDIS;
}

************************** /  

void spi_fifo_init_net(void)

GPIO_SetupPinMux (2,GPIO _MUX_CPU1,0);
GPIO设置引脚选项(2,GPIO输出,GPIO推送);/Cs1

GPIO_SetupPinMux (3,GPIO _MUX_CPU1,0);
GPIO设置引脚选项(3,GPIO输出,GPIO推送);/CS2

GPIO_SetupPinMux (10,GPIO _MUX_CPU1,0);
GPIO设置引脚选项(10,GPIO输出,GPIO推送);//E

GPIO_SetupPinMux (2,GPIO _MUX_CPU1,0);
GPIO设置引脚选项(2,GPIO输出,GPIO推送);/Cs1

EALLOW;

gpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;//在GPIO16上启用上拉(SPISIMOA)
gpioCtrlRegs.GPBPUD.bit.GPIO60 = 0;//在GPIO18上启用上拉(SPICLKA)

gpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3;//异步输入GPIO16 (SPISIMOA)
gpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3;//异步输入GPIO18 (SPICLKA)

gpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 3;//将GPIO16配置为SPISIMOA
gpioCtrlRegs.GPBGMUX2.bit.GPIO60 = 3;//将GPIO18配置为SPICLKA
gpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3;//将GPIO16配置为SPISIMOA
gpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3;//将GPIO18配置为SPICLKA


SpiaRegs.SPIFFTX.Bit.TXFFINTCLR = 1;
SpiaRegs.SPIFFTX.Bit.SPIFFENA = 1;
SpiaRegs.SPIFFTX.Bit.TXFIFO = 0;//重置fifo指针
SpiaRegs.SPIFFTX.Bit.TXFIFO = 1;
SpiaRegs.SPIFFTX.Bit.TXFFIENA = 1;
SpiaRegs.SPIFFTX.Bit.TXFFIL = 0;

SpiaRegs.SPIFFTX.Bit.TXFIFO = 1;
SpiaRegs.SPIFFRX.Bit.RXFIFORESET=1;

//在更改配置之前将重置设置为低
//时钟极性(0 ==上升,1 ==下降)
// 16位字符
//启用环回--禁用环回模式

SpiaRegs.SPICCR.bit.SPISWRESET =0;
SpiaRegs.SPICCR.bit.CLKPOLARITY = 1;
SpiaRegs.SPICTL.bit.CLK_PHASE =0;//带延迟的上升边
SpiaRegs.SPICCR.bit.SPICHAR =(8-1);//(12-1);//7
SpiaRegs.SPICCR.Bit.SPILBK = 0;

//启用主中继器(0 ==从中继器,1 ==主中继器)
//启用传输(Talk)
//时钟相位(0 ==正常,1 ==延迟)
//启用SPI中断

SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;
SpiaRegs.SPICTL.bit.Talk =1;
SpiaRegs.SPICTL.bit.CLK_PHASE =0;
SpiaRegs.SPICTL.bit.SPIINTENA = 1;

//设置波特率
ClkCfgRegs.LOSPPCN.bit.LSPCLKDIV = 0x04;//7
SpiaRegs.SPIBRR.Bit.SPI_bit_rate = 75;//125

SpiaRegs.SPIPRI.Bit.free = 0;

//CLKCFGRegs.LOSPPCP.bit.LSPCLKDIV=0x03;
//从重置中释放SPI

SpiaRegs.SPICCR.bit.SPISWRESET = 1;

//PieCtrlRegs.PIEIER6.bit.INTx2 = 1;//启用PIE组6,INT 2
//IER=M_INT6;//启用CPU INT6
//PieVectorTable.SPIA_TX_INT =&spiAint;
// EDIS;

返回;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Sam:

    您是否可以包含主功能的代码,该功能实际上在每个外围设备上发送/接收数据?

    此致,
    克里斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Void主(void)

    InitSysCtrl();
    伊尼特·格皮奥();

    色调;
    InitPieCtrl();

    IER = 0x0000;
    IFR = 0x0000;

    InitPieVectorTable();

    init_serial_c();
    spi_fifo_init_net();

    同时(1)

    scic_xmit ('y');
    (1);
    SPI_DATA_OUT (0xAA);
    (1);
    }
    }

    作废SCIC_xmit (内部A)

    while (ScicRegs.SCIFFTX.bit.TXFFST !=0){}
    ScicRegs.SCITXBUF.ALL =A;
    (十);
    }


    void spI_data_out (无符号char数据)

    SpiaRegs.SPITXBUF=(data<<8); //发送数据

    美国(50);

    返回;
    }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢Sam。 因此,如果您完全保留该代码,而只是注释掉SPI_DATA_OUT ()函数,那么SCI是否工作? 或者如何单独使用SCI函数?

    在失败的案例中,您的预期数据与收到的数据是什么?

    此致,
    克里斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    即使我通过调用"SPI_fifo_init_net()"来初始化SPI,数据传输公司UART也是垃圾数据(我在putty上检查此信息)。 但当我评论它时,UART就能正常工作。

    正如您所问的,如果我初始化SPI,并注释“SPI_DATA_OUT (0xAA)”,即使这样UART也会给出垃圾数据。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    即使我通过调用"SPI_fifo_init_net()"来初始化SPI,数据传输公司UART也是垃圾数据(我在putty上检查此信息)。 但当我评论它时,UART就能正常工作。

    正如您所问的,如果我初始化SPI,并注释“SPI_DATA_OUT (0xAA)”,即使这样UART也会给出垃圾数据。