主题中讨论的其他器件: C2000WARE
您好!
我正在尝试在 LAUNCHXL-F28379D 上使用 SCI 协议。 像往常一样、我阅读了文档并尝试了示例、但它们不起作用。 我从 SCIA 切换到 SCIB (因为 LAUNCHXL 在 SCIA 上没有引脚)、但它仍然不起作用。 我简化了代码,保留了基本代码,所以这就是我的代码:
#include "F28x_Project.h"
#define TX 18
void scib_echoback_init (void);
void scib_fifo_init (void);
void scib_xmit (int a);
void scib_msg (char * msg);
void main (void)
{
char *msg;
InitSysCtrl();
// GPIO
InitGpio();
GPIO_SetupPinMux (TX、GPIO_MUX_CPU1、 1);
GPIO_SetupPinOptions (TX、GPIO_OUTPUT、GPIO_异 步);
//中断
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EINT;
// SCI
scib_fifo_init ();
scib_echoback_init ();
for (;){
MSG ="A\0";
scib_msg (msg);
}
void scib_echoback_init ()
{
ScibRegs.SCICCR.all = 0x0007;// 1停止位,无环回
//无奇偶校验,8个字符位,
//异步模式,空闲线协议
ScibRegs.SCICTL1.all = 0x0003;//启用 TX、RX、内部 SCICLK、
//禁用 RX ERR、睡眠、TXWAKE
ScibRegs.SCICTL2.all = 0x0003;
ScibRegs.SCICTL2.bit.TXINTENA=1;
ScibRegs.SCICTL2.bit.RXBKINTENA=1;
//
// SCIB 为9600波特
//@LSPCLK = 50MHz (200MHz SYSCLK) HBAUD = 0x02且 LBAUD = 0x8B。
//@LSPCLK = 30MHz (120MHz SYSCLK) HBAUD = 0x01且 LBAUD = 0x86。
//
ScibRegs.SCIHBAUD.ALL = 0x0002;
ScibRegs.SCILBAUD.ALL = 0x008B;
ScibRegs.SCICTL1.all = 0x0023;//从复位中撤回 SCI
}
void scib_xmit (int a)
{
while (ScibRegs.SCIFFTX.bit.TXFFST!= 0){}
ScibRegs.SCITXBUF.all =a;
}
void scib_msg (char * msg)
{
int i;
I = 0;
while (msg[i]!='\0')
{
scib_xmit (msg[i]);
i++;
}
}
void scib_fifo_init()
{
SCIFFTX.ALL = 0xE040;
ScibRegs.SCIFFRX.ALL = 0x2044;
ScibRegs.SCIFFCT.all = 0x0;
}
您可以看到、我只是通过'A'字符反复发送。 在调试模式下、我从 ScibRegs 中检查了 SCITXBUF、并正确填充(0x0061)。 因此、我认为 SCI 的配置是正确的。 为了便于阅读,我使用 Arduino UNO,其代码如下:
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available ()>0){
int msg = Serial.read();
serial.println (msg);
}
两个卡都通过 USB 连接到我的计算机。 我将 TI 卡的引脚4 (GPIO18)连接到 Arduino 的引脚0 (RX)。 但 Arduino RX LED 不会亮起、串行监视器保持为空。
我绝对不知道问题在哪里。 如果需要、我将能够在星期一检查范围。
感谢您的帮助!