您好!
我修改了 C28xx 的实验7示例、以包含带有一些更改 的 SCI_echoback main、从而将 AdcBuf 中的结果传输到超级终端。 lab7主代码和 SCI 代码如下所示:
void main (void)
{
//-- CPU 初始化
InitSysCtrl();//初始化 CPU (文件:sysctrl.c)
InitGpio();//初始化共享 GPIO 引脚(文件:gpio.c)
InitXbar();//初始化输入、输出和 ePWM X-Bar (文件:xbar.c)
InitPieCtrl();//初始化并启用 PIE (文件:PIECTRL.c)
InitWatchdog();//初始化看门狗计时器(文件:watchdog.c)
//--外设初始化
InitAdca();//初始化 ADC-A (文件:adc.c)
InitDacb ();//初始化 DAC-B (文件:dac.c)
InitEPwm();//初始化 ePWM (文件:ePWM.c)
InitECap();//初始化 ECAP (文件:ecap.c)
//--启用全局中断
asm (" CLRC INTM、DBGM");//启用全局中断和实时调试
//--主循环
while (1)//无限循环-等待中断
{
asm (" NOP");
InitSci();
}
}
// main 的末尾()
而 sci.c 文件为:
#include "Lab.h"
void scia_echoback_init (void);
void scia_fifo_init (void);
void scia_xmit (int a);
//void scia_xmit (uint16 AdcBuf);
void scia_msg (char * msg);
//void scia_msg (int * msg1);//我添加了此行
//
//主函
//
空 InitSci (空)
{
// uint16 ReceivedChar;
char *msg;
// char *msg1;//我添加了此行
/*我删除了原始 Echoback 示例中的代码,因为我没有在此处删除它*/
//
//步骤4. 用户特定代码:
//
//LoopCount = 0;
scia_fifo_init();//初始化 SCI FIFO
scia_echoback_init ();//初始化用于 echoback 的 SCI
MSG ="\r\n\n\nHello World!\n\n";
scia_msg (msg);
int 值[8]={'1'、'2'、'2'、'5'、'6'、 '7'、'1'、'A'};//我添加了行185 - 192
int z=0;
对于(z=0;z<8;z++){
// values[z]= z;
int num =值[z];
scia_xmit (num);
}
MSG ="\r\n 您将输入一个字符,DSP 将回显它! \n\n";
scia_msg (msg);
/* for (;;)
{
MSG ="\r\n 输入字符:\0";
scia_msg (msg);
//
//等待 inc 字符
//
while (SciaRegs.SCIFFRX.bit.RXFFST ==0){}//等待空状态
//
//获取字符
//
ReceivedChar = SciaRegs.SCIRXBUF.ALL;
//
//回显字符
//
MSG ="您已发送:\0";
scia_msg (msg);
scia_xmit (ReceivedChar);
LoopCount++;
}*/
}
//
// scia_echoback_init -测试1、SCIA DLB、8位字、波特率0x000F、
//默认,1个停止位,无奇偶校验
//
void scia_echoback_init ()
{
//
//注意:SCIA 外设的时钟被打开
//在 InitSysCtrl()函数中
//
SciaRegs.SCICCR.all = 0x0007;// 1停止位,无回路
//无奇偶校验,8个字符位,
//异步模式,空闲线协议
SciaRegs.SCICTL1.all = 0x0003;//启用 TX、RX、内部 SCICLK、
//禁用 RX ERR、睡眠、TXWAKE
SciaRegs.SCICTL2.all = 0x0003;
SciaRegs.SCICTL2.bit.TXINTENA=1;
SciaRegs.SCICTL2.bit.RXBKINTENA=1;
//
// SCIA 为9600波特
//@LSPCLK = 50MHz (200MHz SYSCLK) HBAUD = 0x02且 LBAUD = 0x8B。
//@LSPCLK = 30MHz (120MHz SYSCLK) HBAUD = 0x01且 LBAUD = 0x86。
//
SciaRegs.SCIHBAUD.ALL = 0x0002;
SciaRegs.SCILBAUD.ALL = 0x008B;
SciaRegs.SCICTL1.all = 0x0023;//从复位中撤回 SCI
}
//
// scia_xmit -从 SCI 发送一个字符
//
void scia_xmit (int a)
//void scia_xmit (uint16 AdcBuf)
{
while (SciaRegs.SCIFFTX.bit.TXFFST!= 0){}
SciaRegs.SCITXBUF.ALL =A;
//SciaRegs.SCITXBUF.all =AdcBuf;
}
//
// scia_msg -通过 SCIA 发送消息
//
void scia_msg (char * msg)
{
int i;
I = 0;
while (msg[i]!='\0')
{
scia_xmit (msg[i]);
i++;
}
}
// scia_fifo_init -初始化 SCI FIFO
//
void scia_fifo_init()
{
SciaRegs.SCIFFTX.ALL = 0xE040;
SciaRegs.SCIFFRX.ALL = 0x2044;
SciaRegs.SCIFFCT.all = 0x0;
}
//
//文件末尾 sci.c
//
我很困惑、我有几个问题:
当我尝试在主循环中或在 ADC_ISR 中启动 SCI 以连续发送到 HEYPERterminal 时、最好在哪里启动 SCI?
SCI 正常运行、上面已发布的代码、并传输 hello world 消息和我创建的简单数组、 但我不知道如何将 AdcBuf 中的结果复制到 SCI 为了传输它、我尝试在 ADC_ISR 中启动 SCI、但它不起作用。
我非常感谢为解决此问题提供的任何帮助。
此致

