TI中文支持网
TI专业的中文技术问题搜集分享网站

利用C6748通过UART2控制云台转动

本人新手,初学DSP,要实现利用C6748通过UART2控制云台转动(基于visca协议),程序如下:

/*
* 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"
// 时钟
#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[]);

int main(void) {

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

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

// UART 初始化
UARTInit();

for(i=0;command[i];i++)
{UARTPutHexNum(command[i]);

}
CommandGet(command);
Delay(0x00FFFFFF);
for(i=0;i<8;i++)
Value[i]=UARTGetHexNum();
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时钟为150MHz
unsigned int baudrate=9600; //波特率为9600bit/s
unsigned int config=UART_WORDL_8BITS; //设置数据位为8位,停止位为1位,无奇偶校验位

unsigned int overSampRate=UART_OVER_SAMP_RATE_16; //产生一个16*参考时钟用于内部发送和接收逻辑
unsigned int *pBaud=&baudrate,*pConfig=&config;
UARTConfigSetExpClk (baseAdd,uartClk,baudrate,config,overSampRate);
UARTConfigGetExpClk (baseAdd,uartClk,pBaud,pConfig);
// 使能 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];i++)
{ if((16 – a[i]/16) <= 6)
{ num[j]=a[i]/16+0x37;}
else
{ num[j]=a[i]/16+0x30;}
j++;
if((16 – a[i]%16) <= 6)
{ num[j]=a[i]%16+0x37;}
else
{ num[j]=a[i]%16+0x30;}
j++;
}
for(k=0;num[k];k++)
printf("%c/n",num[k]);

}

但是加载运行后,云台没反应,控制台也没输出,暂停后提示找不到boot.c,但是运行Demo例程时,也有找不到boot.c的错误。这是为什么?求大神指教。

Denny%20Yang99373:

可以分为一下几步调试

1,看看软件能否跑起来,在程序里加些打印之类的

2,看看串口有没有输出,可以进行回环测试,或者接到PC等

qi zhao4:

回复 Denny%20Yang99373:

回环测试怎么弄,需要修改程序吗?还是只要修改寄存器的值

qi zhao4:

回复 qi zhao4:

刚刚已经回环测试了,确定数据发出去了,因为能在接收端收到值,但是云台还是没反应

qi zhao4:

回复 qi zhao4:

有没有大神帮忙解答,这是怎么回事,为什么命令发出去了,云台就是没反应,就算我发送的指令错误,云台也应该响应指令告诉我命令错误啊!有没有可能是线 的问题或者是板子的串口本身有问题

赞(0)
未经允许不得转载:TI中文支持网 » 利用C6748通过UART2控制云台转动
分享到: 更多 (0)