关于TMS320C6748的UART通信 - TMS320C6748 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2935|回复: 3
打印 上一主题 下一主题

关于TMS320C6748的UART通信

[复制链接]

3

主题

9

帖子

45

积分

新手上路

Rank: 1

积分
45
跳转到指定楼层
楼主
发表于 2016-8-9 15:23:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我要用TMS320C6748控制云台转动(基于Visca协议),利用串口RS232给云台发送命令,因为命令是用十六进制,比较长,所以我一个字节一个字节的发送,可是整个程序执行完,云台也没反应,也没有一个返回值。UART初始化什么的我是基于例程UART2_INT改写的,发送和接收命令的函数我是基于uart.c的UARTCharGet()和UARTCharPut()函数改写的。搞了好久,一点头绪都没有,求大神帮忙解答因为我是一个新手,没搞过DSP,现在根本不知道怎么搞,下面是我的程序:
/*
* main.c
*/
#include"uart.h"
#include"uartStdio.h"
#include"psc.h"
#include"TL6748.h"
#include"soc_C6748.h"
#include "hw_types.h"
#include "gpio.h"
#include "hw_uart.h"
// 时钟
#define SYSCLK_1_FREQ     (456000000)
#define SYSCLK_2_FREQ     (SYSCLK_1_FREQ/2)
#define UART_2_FREQ       (SYSCLK_2_FREQ)

/*              函数声明                                                    */
/*                                                                          */
/// 外设使能配置
void PSCInit(void);

// GPIO 管脚复用配置
void GPIOBankPinMuxSet();
// GPIO 管脚初始化
void GPIOBankPinInit();

// UART 初始化
void UARTInit(void);
// 延时
void Delay(unsigned int n);
//命令输出,把发送给云台的命令和云台的返回指令在console控制台输出
void CommandGet(unsigned int a[]);
//发送命令
void CommandTx(unsigned int b[]);
//接收命令
unsigned int CommandRx();

int main(void) {


unsigned int i,command[9]={0x83,0x01,0x06,0x05,0xFF},Value[8]={0}; //设置UART2的寄存器的基地址和发送给云台的控制命令
          // 外设使能配置
                PSCInit();

     // GPIO 管脚复用配置
                GPIOBankPinMuxSet();

        // UART 初始化
                UARTInit();


CommandTx(command);
CommandGet(command);
Delay(0x00FFFFFF);
for(i=0;i<8;i++)
Value=CommandRx();
CommandGet(Value);

}
/****************************************************************************/
/*                                                                          */
/*              PSC 初始化                                                  */
/*                                                                          */
/****************************************************************************/
void PSCInit(void)
{
    // 对相应外设模块的使能也可以在 BootLoader 中完成
    // 使能 UART2模块
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART2, PSC_POWERDOMAIN_ALWAYS_ON,PSC_MDCTL_NEXT_ENABLE);
}

/****************************************************************************/
/*                                                                          */
/*              GPIO 管脚复用配置                                           */
/*                                                                          */
/****************************************************************************/
void GPIOBankPinMuxSet(void)
{
        // UART2 禁用流控
        UARTPinMuxSetup(2, FALSE);
}

/****************************************************************************/
/*                                                                          */
/*              UART 初始化                                                 */
/*                                                                          */
/****************************************************************************/
void UARTInit(void)
{ unsigned int uartClk=UART_2_FREQ,baseAdd=SOC_UART_2_REGS;  //设置UART时钟
  unsigned int baudrate=9600;  //波特率为9600bit/s
  unsigned int config=UART_WORDL_8BITS;    //设置数据位为8位,停止位为1位,无奇偶校验位

  unsigned int overSampRate=UART_OVER_SAMP_RATE_16;  //产生一个16*参考时钟用于内部发送和接收逻辑

  UARTConfigSetExpClk (baseAdd,uartClk,baudrate,config,overSampRate);

  // 使能 UART2
          UARTEnable(SOC_UART_2_REGS);
           // 使能接收 / 发送 FIFO
              UARTFIFOEnable(SOC_UART_2_REGS);

              // 设置 FIFO 级别
              UARTFIFOLevelSet(SOC_UART_2_REGS, UART_RX_TRIG_LEVEL_1);

}
/****************************************************************************/
/*                                                                          */
/*              延时                                                        */
/*                                                                          */
/****************************************************************************/
void Delay(unsigned int n)
{
        unsigned int i;

        for(i=n;i>0;i--);

}
/****************************************************************************/
/*                                                                          */
/*              命令输出                                                  */
/*                                                                          */
/****************************************************************************/
void CommandGet(unsigned int a[])
{  unsigned char num[18] = {0};
   unsigned int i,j=0,k;
for(i=0;a;i++)
{ if((16 - a/16) <= 6)
{   num[j]=a/16+0x37;}
else
{   num[j]=a/16+0x30;}
j++;
  if((16 - a%16) <= 6)
{   num[j]=a%16+0x37;}
else
{   num[j]=a%16+0x30;}
j++;
}
for(k=0;num[k];k++)
printf("%c\n",num[k]);

}
//发送命令
void CommandTx(unsigned int b[])
{unsigned int i,txEmpty;
for(i=0;b;i++)
{txEmpty = (UART_THR_TSR_EMPTY | UART_THR_EMPTY);

/*
** Here we check for the emptiness of both the Trasnsmitter Holding
** Register(THR) and Transmitter Shift Register(TSR) before writing
** data into the Transmitter FIFO(THR for non-FIFO mode).
*/

while (txEmpty!=(HWREG(SOC_UART_2_REGS + UART_LSR) & txEmpty));
HWREG(SOC_UART_2_REGS + UART_THR) =b;
}

}

//接收命令
unsigned int CommandRx()
{int data = 0;

/*
** Busy check if data is available in receiver FIFO(RBR regsiter in non-FIFO
** mode) so that data could be read from the RBR register.
*/
while ((HWREG(SOC_UART_2_REGS + UART_LSR) & UART_DATA_READY) == 0);

data = (int)HWREG(SOC_UART_2_REGS + UART_RBR);

return data;}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

97

帖子

2049

积分

金牌会员

Rank: 6Rank: 6

积分
2049
沙发
发表于 2016-8-9 18:56:28 | 只看该作者
你先用一个USB转串口连在电脑上通过串口调试助手观察你的数据是不是对的
回复 支持 反对

使用道具 举报

3

主题

9

帖子

45

积分

新手上路

Rank: 1

积分
45
板凳
 楼主| 发表于 2016-8-9 19:02:03 | 只看该作者
这个我也想过,只是现在没这个连接线
回复 支持 反对

使用道具 举报

3

主题

9

帖子

45

积分

新手上路

Rank: 1

积分
45
地板
 楼主| 发表于 2016-8-11 14:37:08 | 只看该作者
数据就算不对,云台也会返回命令错误什么的指令,可是现在是什么返回值也没有
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-5 07:25 , Processed in 0.036506 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表