dsp6657的串口学习
1. 打算用dsp6657学习下,先用串口实验吧。找一下芯片支持库Chip support libraries,路径D:\ti\pdk_C6657_1_1_1_4\packages\ti\csl,新建工程

2. 进入这个目录没找到串口的C库文件?只能去其他工程看下为啥了。确实没有,其他工程用的是这两个初始化的
platform_uart_init();
platform_uart_set_baudrate();
3. DSP6657有2个串口,支持流控可选

4. 搞定头文件的路径,还有库的路径D:\ti\pdk_C6657_1_1_1_4\packages\ti\platform\evmc6657l\platform_lib\lib\debug\ti.platform.evm6657l.lite.lib,现在很想知道怎么修改成相对路径,写了一个简单的程序,先测试一下
#include "cslr_uart.h"
//估计导入包之后就可以直接使用包含的路径了
#include "ti/platform/platform.h" //#define PLATFORM_WRITE_IN 1
void delay(int j)
{
int i = ;
while(j--)
{
int i = ;
while(i--);
}
}
void main()
{
int i;
platform_init_flags sFlags;
platform_init_config sConfig;
/* Status of the call to initialize the platform */
Int32 pform_status;
/* Platform Information - we will read it form the Platform Library */
platform_info sPlatformInfo; /*
* You can choose what to initialize on the platform by setting the following
* flags. We will initialize everything.
*/
memset( (void *) &sFlags, , sizeof(platform_init_flags));
memset( (void *) &sConfig, , sizeof(platform_init_config)); sFlags.pll = ;
sFlags.ddr = ;
sFlags.tcsl = ; /* Time stamp counter */
sFlags.phy = ; /* Ethernet */
sFlags.ecc = ; sConfig.pllm = ; pform_status = platform_init(&sFlags, &sConfig);
if (pform_status == Platform_EOK) {
/* Get information about the platform so we can use it in various places */
memset( (void *) &sPlatformInfo, , sizeof(platform_info));
(void) platform_get_info(&sPlatformInfo);
} platform_uart_init();
platform_uart_set_baudrate();
//串口初始化
//打印一段
while()
{ platform_uart_write(0x55);
(void) platform_led(, PLATFORM_LED_ON, (LED_CLASS_E) PLATFORM_USER_LED_CLASS);
delay();
(void) platform_led(, PLATFORM_LED_OFF, (LED_CLASS_E) PLATFORM_USER_LED_CLASS);
delay();
}
}
5. 估计是没有cmd文件,所以load下载程序的时候失败了。不过奇怪的是,其他的6657工程没有CMD文件。C665x DSP 集成了大量的片上存储器。除了 32KB 的 L1 程序和数据高速缓存区,每核配有 1024KB 专用存储器,可配置为可映射 RAM 或缓存。该器件还集成了 1024KB 的多核共享存储器,可以作为一个共享 L2 SRAM或共享的 L3 的 SRAM。所有的 L2 存储器具有检错和纠错能力。这次写到L1空间试一下。如果要触发core1运行,应该还需要在core0运行起来后,由core0向core1写IPC触发。
6. 建立一个CMD文件测试一下
/*
* Linker command file
*
*/ -c
-heap 0x41000
-stack 0xa000 /* Memory Map 1 - the default */
MEMORY
{
L1PSRAM (RWX) : org = 0x0E00000, len = 0x7FFF
L1DSRAM (RWX) : org = 0x0F00000, len = 0x7FFF L2SRAM (RWX) : org = 0x0800000, len = 0x080000
MSMCSRAM (RWX) : org = 0xc000000, len = 0x100000
DDR3 (RWX) : org = 0x80000000,len = 0x20000000
} SECTIONS
{
.csl_vect > L2SRAM
.text > L2SRAM
GROUP (NEAR_DP)
{
.neardata
.rodata
.bss
} load > L2SRAM
.stack > L2SRAM
.cinit > L2SRAM
.cio > L2SRAM
.const > L2SRAM
.data > L2SRAM
.switch > L2SRAM
.sysmem > L2SRAM
.far > L2SRAM
.testMem > L2SRAM
.fardata > L2SRAM
platform_lib > L2SRAM
}
7. 仿真测试的时候发现LED灯会闪烁,但是串口的数据不对,怀疑是时钟的配置不对

8. 测试的时候以为是CFG文件的问题,就添加了一个CFG文件(添加的时候,CCS会提示是否需要把RTSC添加进工程,我添加了),没什么用处,删掉CFG文件,但是CCS提示RTSC需要一个.cfg文件,看样子还需要把RTSC也删除。搞不定,重新建了个工程,把之前的C文件和CMD文件拷贝进来。
9. 串口波特率不对头,估计是系统时钟配置的问题,那么没办法只能用逻辑分析仪抓包看一下,其实每次是有数据的,因为之前把波特率调低有乱码数据。下图是RS232的波形,每个位是520.5us,用1000000/520.5 = 1923波特率。

10. 看下串口收到的数据,正确了,接下来需要研究下DSP6657的时钟配置函数了。

11. 看下波特率配置函数,时钟源是PLATFORM_UART_INPUT_CLOCK_RATE,不过系统时钟不对头,比较麻烦。
Platform_STATUS platform_uart_set_baudrate(uint32_t baudrate) {
uint16_t brate;
IFPRINT(platform_write("platform_uart_set_baudrate(baudrate=%d) called \n", baudrate));
brate = ((Uint16) (PLATFORM_UART_INPUT_CLOCK_RATE/(baudrate * )));
UartSetBaudRate(brate);
return Platform_EOK;
}
dsp6657的串口学习的更多相关文章
- stm32串口学习(二)
今天继续学习stm32的串口编程(利用库函数).上次我们说了串口的发送,这次我们说接收. 接收可以用查询的方法,也可以用中断.显然,工程中多用中断的方式,那么就来看看中断接收. 代码其实很简单,基本的 ...
- stm32串口学习(一)
串口在工作中经常用到,今天我们从零开始学习stm32的串口编程(利用库函数). 先从最简单的情况开始,假设我们要实现的功能就是串口发送一个字节,不考虑接收,也不考虑中断. 那么要解决两个问题: 1 串 ...
- cubemx+stm32串口学习汇总资料
这篇文章是串口中断的文章--STM32基于CubeMX的高速串口收发程序(中断模式)比较有帮助. http://www.stmcu.org.cn/module/forum/thread-616613- ...
- stm32串口学习笔记
stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...
- Qt 串口学习3
1.怎样将选择波特率 1)使用if else 的方法 if(ui->BaudRate->currentText()==tr("9600")) //根据组合框 ...
- Qt 串口学习2
未命名 (2) 1 新建串口 //new serial portmy_serialport= new QSerialPort(); 2给串口设定名字 my_serialport->setPort ...
- NIOS II 之串口学习
UART中有6个寄存器分别为control, status, rxdata, txdata, divisor,endofpacket. 的寄存器是16位位宽的. UART会产生一个高电平的中断,当接收 ...
- 【DM8168学习笔记6】学习思路整理
DavinciDM8168的开发是一套大的系统,包括ARM.DSP.以及他们的通信协作.对学习思路做简单总结: 一. 对于整体框架的把握 参考了一些文章.介绍davinci整体基础知 ...
- zigbee学习之路(十):串口(接收)
一.前言 上次我们学习了串口的发送,今天我们要学习串口的接收,要实现的功能是接收电脑发来的数据,控制LED 灯闪烁,而且将收到的数据发回给电脑显示出来.而且要采用不占用cpu资源的中断. 二原理与分析 ...
随机推荐
- 总结一下MVC思想
MVC (Model View Controler)本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用 ...
- 4springboot:日志(上)
1.主流的日志框架 2.SLF4J使用 如何在系统中使用SLF4j https://www.slf4j.org 以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面 ...
- ringMVC——redirect重定向跳转传值
spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. 首先先来介绍一下不带参数的重定向: ...
- WinCE下SQLCE数据库开发(VS,VB.net,VC++)
WinCE下SQLCE数据库开发(VS,VB.net,VC++) WinCE下SQLCE数据库开发 微软的SQL Server数据库由于其功能强大.方便使用,因此在很多行业都被广泛应用.基于智能设 ...
- Code First 二 DataAnnotation 数据注解
Code-First中配置域类 我们在前一节学习了默认的代码优先约定.Code-First使用默认约定从您的域类构建概念模型.Code-First利用称为约定而不是配置的编程模式.这意味着您可以通过配 ...
- vue+webpack搭建项目
1.全局安装node.js 2.安装vue-cli 可以在项目目录安装 npm install -g vue-cli 使用vue-list命令选择webpack模板 vue init webpack ...
- IOS开发,摄像头对焦状态监控
camera autofocus observer? I find the solution for my case to find when autofocus starts / ends. It' ...
- 5.同步关键字(synchronized)
同步关键字(synchronized): 多线程给我们提供方便的时候,也给整个编程增加了难度,尤其是对临界资源的控制,尤为重要. 一个在操作系统课上,老掉牙的事例,就把这种情况解释的明明白白. 一对夫 ...
- 工具 | Axure基础操作 No.1
Axure作为一款热门的原型设计工具,是产品汪必备的一个技能.对于我个人来说,虽然更加喜欢墨刀这种小清新并且易用的网页版轻量级工具. 我在这里进行一些简单操作的动图,方便和我一样刚入门的同学容易看得明 ...
- Office365完整离线安装包下载及自定义安装教程
Office 365是微软打造的一款适用于教育机构使用的office办公软件,这里为大家提供了一个Office 365离线安装包下载工具,让office 365离线包下载到本地再安装,而不是联网下载安 ...