本人新手,初学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:
有没有大神帮忙解答,这是怎么回事,为什么命令发出去了,云台就是没反应,就算我发送的指令错误,云台也应该响应指令告诉我命令错误啊!有没有可能是线 的问题或者是板子的串口本身有问题