打印

C5502的UART串口发送数据给PC问题

[复制链接]
1055|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
加cpp|  楼主 | 2016-7-31 21:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现有的例程是通过串口助手发送数据给dsp再转给pc,现需要dsp单发送自身处理好的数据给pc,尝试更改URTHR(发送保持寄存器)的赋值但并未出现结果,请问按我需要的内容应该怎么改这段程序,谢谢。。。也有点疑惑如何让dsp产生的数据不断通过串口传出来而不是pc发pc收。

附上程序:

#include <stdio.h>
#include <csl.h>
#include <csl_pll.h>
#include <csl_chip.h>
#include <csl_irq.h>
#include <csl_gpt.h>
#include <csl_uart.h>
#include <csl_uarthal.h>

void delay(unsigned int N);
/* Reference start of interrupt vector table */
/* This symbol is defined in file, vectors.s55 */
extern void VECSTART(void);

Uint16 i = 0;
Uint16 j = 0;
Uint16 DestData,DestData1;
Uint16 DataCount=0;

Uint16 LLL=55;//假设这是dsp内部处理出来的需要发送的数据

/* 通过定义宏来控制两个外围存储器映射的寄存器,从而实现对GPIO口的控制 */
#define GPIODIR (*(volatile ioport Uint16*)(0x3400))
#define GPIODATA (*(volatile ioport Uint16*)(0x3401))

//Uint16 length = 4;
//char pbuf[4] = {0x74, 0x65, 0x73, 0x74};
//CSLBool returnFlag;

/*UART的中断程序*/
interrupt void UartIsr(void)
{
// Transimit seriz of serial debugger on pc is:
// 1112131415161718191A1B1C1D1E1F2021222324
UART_FSET(URLCR, DLAB, 0);

/* wait for RX empty */                       。。。。。。。感觉是不是改动这段。。。。。。
while(!UART_FGET(URLSR,DR));
DestData = UART_RGET(URRBR);
UART_FSET(URLCR, DLAB, 0);
UART_RSET(URTHR,LLL);
}
void Uart_Config(void)
{
/* Set BSR to disable SP2MODE */
CHIP_FSET(XBSR, SP2MODE,0) ;

/* Disable all UART events */
UART_FSET(URLCR,DLAB,0);
UART_RSET(URIER, UART_RINT);

/* Reset and disable FIFOs */
UART_RSET(URFCR, 0x7);
UART_RSET(URFCR, 0);

/* Set DLL and DLM to values appropriate for the required baudrate */
UART_FSET(URLCR, DLAB, 1); // DLAB = 1
//UART_RSET(URDLL, 0x45); // 9600bps
UART_RSET(URDLL, 0xE8); // 9600bps
UART_RSET(URDLM, 0x01);
UART_FSET(URLCR, DLAB, 0); // DLAB = 0

/* Setup word size, stop bits, parity */
UART_RSET(URLCR, 0x03); // 8 data bits, no parity, one stop bit

/* Disable loopback control */
UART_RSET(URMCR, 0);

/* UART out of reset */
UART_FSET(URPECR,URST,1);

/* Temporarily disable all maskable interrupts */
//IRQ_globalDisable();

/* Clear interrupt enable bit */
IRQ_disable(IRQ_EVT_RINT2);

/* Clear any pending Timer interrupts */
IRQ_clear(IRQ_EVT_RINT2);

/* Place interrupt service routine address at */
/* associated vector location */
IRQ_plug(IRQ_EVT_RINT2, &UartIsr);

/* Enable Timer interrupt */
IRQ_enable(IRQ_EVT_RINT2);

/* Enable all maskable interrupts */
//IRQ_globalEnable(); // IRQ_globalDisable();
}
void main(void)
{
/* Initialize CSL library - This is REQUIRED !!! */
CSL_init();

/* PLL configuration structure used to set up PLL interface */
// 主频为300Mhz
PLL_setFreq(1, 0xf, 0, 1, 3, 3, 0);


IRQ_setVecs((Uint32)(&VECSTART));
Uart_Config();
/* Enable all maskable interrupts */
IRQ_globalEnable();

// returnFlag = UART_write(&pbuf[0],length,0);

for(;;)
{

for(i=0; i<16; i++)
{
delay(300);

}

}
}
void delay(unsigned int N)
{
unsigned int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
asm(" nop");

}

相关帖子

沙发
zhangmangui| | 2016-7-31 21:46 | 只看该作者
UART_write(&pbuf[0],length,0);
这个函数在哪儿啊     用这个发  指定长度

使用特权

评论回复
板凳
加cpp|  楼主 | 2016-7-31 23:13 | 只看该作者
zhangmangui 发表于 2016-7-31 21:46
UART_write(&pbuf[0],length,0);
这个函数在哪儿啊     用这个发  指定长度

这个是不是写在主程序for循环之前?如果在最前面配置uart中断函数里的URTHR发送保持寄存器配置值可以吗?

使用特权

评论回复
地板
vibra2016| | 2016-8-2 22:37 | 只看该作者
这个主要先看下UART相关的程序代码设计的。

使用特权

评论回复
5
zhangmangui| | 2016-8-2 22:40 | 只看该作者
加cpp 发表于 2016-7-31 23:13
这个是不是写在主程序for循环之前?如果在最前面配置uart中断函数里的URTHR发送保持寄存器配置值可以吗? ...

需要一直发的话   肯定要在循环中

使用特权

评论回复
6
chenci2013| | 2016-8-4 17:21 | 只看该作者
直接循环发送吗

使用特权

评论回复
7
chenci2013| | 2016-8-4 17:25 | 只看该作者
数据计算完成就直接发送?

使用特权

评论回复
8
hellosdc| | 2016-8-5 21:56 | 只看该作者
没有看明白楼主是什么需求

使用特权

评论回复
9
hellosdc| | 2016-8-5 21:57 | 只看该作者
数据直接发送不就行了吗?

使用特权

评论回复
10
uiint| | 2016-8-8 16:45 | 只看该作者
这个存在什么问题,没有看懂。

使用特权

评论回复
11
uiint| | 2016-8-8 16:45 | 只看该作者
UART的串口配置吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

12

帖子

0

粉丝