打印

C5502的UART传出数据位少的问题

[复制链接]
592|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
加cpp|  楼主 | 2016-11-2 16:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
利用csl库进行配置和传输数据,应该是5位数据输出,但第一次传输只有后四位,第二次传输是5位但第一位变成第一次传输的最后一位不是我要的那位数据,附上程序和结果图,求大神指点

程序:

#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>


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

Uint16 i = 0;
Uint16 j = 0;

//Uint8 STR_LEN=5;
#define STR_LEN 5
char pbuf[5]={0x11,0x22,0x33,0x44,0x55};
CSLBool returnFlag;
/* 通过定义宏来控制两个外围存储器映射的寄存器,从而实现对GPIO口的控制 */
#define GPIODIR (*(volatile ioport Uint16*)(0x3400))
#define GPIODATA (*(volatile ioport Uint16*)(0x3401))
/*UART的中断程序*/

UART_Setup mySetup = {
75, /* input clock freq */
UART_BAUD_38400, /* baud rate */
UART_WORD8, /* word length */
UART_STOP1, /* stop bits */
UART_DISABLE_PARITY, /* parity */
UART_FIFO_DISABLE, /*DISABLE */
UART_NO_LOOPBACK, /* Loop Back enable */
};


void main(void)
{
/* Initialize CSL library - This is REQUIRED !!! */
CSL_init();

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

// IRQ_setVecs((Uint32)(&VECSTART));
// Uart_Config();
/* Configure UART registers using setup structure */
UART_setup(&mySetup);

/* Enable all maskable interrupts */
// IRQ_globalEnable();
// IRQ_globalDisable();

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

}

1.JPG (97.56 KB )

1.JPG

相关帖子

沙发
zhangmangui| | 2016-11-2 22:38 | 只看该作者
你连续发UART_write(&pbuf[0],STR_LEN,0);
看看出现什么规律

使用特权

评论回复
板凳
加cpp|  楼主 | 2016-11-3 09:14 | 只看该作者
zhangmangui 发表于 2016-11-2 22:38
你连续发UART_write(&pbuf[0],STR_LEN,0);
看看出现什么规律

仍然是第一位不为我自己的第一位是上一次发送的最后一位

使用特权

评论回复
地板
加cpp|  楼主 | 2016-11-3 09:16 | 只看该作者
同时使用了csl中cslc5500里面的例程,仍然是错位
程序和结果如下:
#include <stdio.h>
#include <csl.h>
#include <csl_uart.h>
#include <csl_chiphal.h>
#include <csl_chipdat.h>
#include <csl_uartdat.h>
#include <csl_uarthal.h>



//---------Global constants---------
/* String length to be received and transmitted */
#define STR_LEN   83

//---------Global data definition---------
/* Buffer to be copied to clip board and sent to UART
   using terminal emulator program
*/


char clipboardBuf[] = {
" <BEGIN>The quick brown fox jumped over lazy dog. This is simple UART test<END>"
};

/* User buffer that receives data */
char myBuf[STR_LEN];

/* UART setup structure */
UART_Setup mySetup = {
   75,  /* input clock freq */
   UART_BAUD_38400, /* baud rate */
   UART_WORD8, /* word length */
   UART_STOP1, /* stop bits */
   UART_DISABLE_PARITY, /* parity */
   UART_FIFO_DISABLE, /*DISABLE */
   UART_NO_LOOPBACK,   /* Loop Back enable */
};

//---------main routine---------
void main()
{
    /* Loop counter and error flag */
    Int16 i, error = 0;

    /* Initialize CSL library */
    CSL_init();

    /* Configure UART registers using setup structure */
    UART_setup(&mySetup);
//    PLL_setFreq(1, 0x3, 0, 1, 3, 3, 0);

    /* UART receiver reads data from PC COM port */
           if (UART_read(myBuf, STR_LEN, 0) == FALSE) {
               error = 1;
           }
           else {
               
               /* UART transmitter write data to PC COM port */
               if ((UART_write(myBuf, STR_LEN, 0)) == FALSE)
                   error = 1;
           }
          
           /* Verify the recevied data for correctness */
           for (i = 0; i < STR_LEN-1; i++) {
               if (myBuf[i] != clipboardBuf[i]) {
                   error = 1;
                   break;
               }
           }
          
           /* Display PASS/FAIL status based on error flag */
           if (error)
               printf("\nTEST FAILED\n");
           else
               printf("\nTEST PASSED\n");
}



2.JPG (154.82 KB )

2.JPG

4.JPG (8.76 KB )

4.JPG

3.JPG (12.14 KB )

3.JPG

使用特权

评论回复
5
aspoke| | 2016-11-4 22:52 | 只看该作者
数据位少,可能是你发送计数有问题。

使用特权

评论回复
6
aspoke| | 2016-11-4 22:53 | 只看该作者
单步调试能够找到问题,看看怎么发送的。

使用特权

评论回复
7
i1mcu| | 2016-11-5 16:56 | 只看该作者
不是5位数据吗?

使用特权

评论回复
8
i1mcu| | 2016-11-5 16:59 | 只看该作者
STR_LEN 这个不是定义的5吗?

使用特权

评论回复
9
xiaoyaozt| | 2016-11-7 22:36 | 只看该作者
重复发送数据了吗?

使用特权

评论回复
10
xiaoyaozt| | 2016-11-7 22:38 | 只看该作者
看看你的UART的波特率正确吗?

使用特权

评论回复
11
vibra2016| | 2016-11-8 21:33 | 只看该作者
这个就看两边的数据同步问题的,首先考虑的数据的传输速率的。。

使用特权

评论回复
12
vibra2016| | 2016-11-8 21:34 | 只看该作者
再次是两边的频率是否都比较准确的,若由于提供的时钟不准确造成这个的一般都很难注意到的。

使用特权

评论回复
13
isseed| | 2016-11-8 22:48 | 只看该作者
输出数位少,是不是存在遗漏发送了

使用特权

评论回复
14
isseed| | 2016-11-8 22:49 | 只看该作者
地址位传输的正确吗?

使用特权

评论回复
15
mmbs| | 2016-11-10 21:26 | 只看该作者
单步调试试过了吗?

使用特权

评论回复
16
mmbs| | 2016-11-10 21:28 | 只看该作者
讲义使用for循环进行发送。

使用特权

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

本版积分规则

4

主题

12

帖子

0

粉丝