|
1. 打算用dsp6657学习下,先用串口实验吧。找一下芯片支持库Chip support libraries,路径D:\ti\pdk_C6657_1_1_1_4\packages\ti\csl,新建工程
2. 进入这个目录没找到串口的C库文件?只能去其他工程看下为啥了。确实没有,其他工程用的是这两个初始化的
1 platform_uart_init();
2 platform_uart_set_baudrate(19200);
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,现在很想知道怎么修改成相对路径,写了一个简单的程序,先测试一下
复制代码
1 #include "cslr_uart.h"
2 //估计导入包之后就可以直接使用包含的路径了
3 #include "ti/platform/platform.h"
4
5 //#define PLATFORM_WRITE_IN 1
6 void delay(int j)
7 {
8 int i = 50000;
9 while(j--)
10 {
11 int i = 50000;
12 while(i--);
13 }
14 }
15 void main()
16 {
17 int i;
18 platform_init_flags sFlags;
19 platform_init_config sConfig;
20 /* Status of the call to initialize the platform */
21 Int32 pform_status;
22 /* Platform Information - we will read it form the Platform Library */
23 platform_info sPlatformInfo;
24
25 /*
26 * You can choose what to initialize on the platform by setting the following
27 * flags. We will initialize everything.
28 */
29 memset( (void *) &sFlags, 0, sizeof(platform_init_flags));
30 memset( (void *) &sConfig, 0, sizeof(platform_init_config));
31
32 sFlags.pll = 0;
33 sFlags.ddr = 0;
34 sFlags.tcsl = 0; /* Time stamp counter */
35 sFlags.phy = 0; /* Ethernet */
36 sFlags.ecc = 0;
37
38 sConfig.pllm = 0;
39
40 pform_status = platform_init(&sFlags, &sConfig);
41 if (pform_status == Platform_EOK) {
42 /* Get information about the platform so we can use it in various places */
43 memset( (void *) &sPlatformInfo, 0, sizeof(platform_info));
44 (void) platform_get_info(&sPlatformInfo);
45 }
46
47 platform_uart_init();
48 platform_uart_set_baudrate(19200);
49 //串口初始化
50 //打印一段
51 while(1)
52 {
53
54 platform_uart_write(0x55);
55 (void) platform_led(1, PLATFORM_LED_ON, (LED_CLASS_E) PLATFORM_USER_LED_CLASS);
56 delay(50);
57 (void) platform_led(1, PLATFORM_LED_OFF, (LED_CLASS_E) PLATFORM_USER_LED_CLASS);
58 delay(50);
59 }
60 }
复制代码
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文件测试一下
复制代码
1 /*
2 * Linker command file
3 *
4 */
5
6 -c
7 -heap 0x41000
8 -stack 0xa000
9
10 /* Memory Map 1 - the default */
11 MEMORY
12 {
13 L1PSRAM (RWX) : org = 0x0E00000, len = 0x7FFF
14 L1DSRAM (RWX) : org = 0x0F00000, len = 0x7FFF
15
16 L2SRAM (RWX) : org = 0x0800000, len = 0x080000
17 MSMCSRAM (RWX) : org = 0xc000000, len = 0x100000
18 DDR3 (RWX) : org = 0x80000000,len = 0x20000000
19 }
20
21 SECTIONS
22 {
23 .csl_vect > L2SRAM
24 .text > L2SRAM
25 GROUP (NEAR_DP)
26 {
27 .neardata
28 .rodata
29 .bss
30 } load > L2SRAM
31 .stack > L2SRAM
32 .cinit > L2SRAM
33 .cio > L2SRAM
34 .const > L2SRAM
35 .data > L2SRAM
36 .switch > L2SRAM
37 .sysmem > L2SRAM
38 .far > L2SRAM
39 .testMem > L2SRAM
40 .fardata > L2SRAM
41 platform_lib > L2SRAM
42 }
复制代码
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,不过系统时钟不对头,比较麻烦。
复制代码
1 Platform_STATUS platform_uart_set_baudrate(uint32_t baudrate) {
2 uint16_t brate;
3 IFPRINT(platform_write("platform_uart_set_baudrate(baudrate=%d) called \n", baudrate));
4 brate = ((Uint16) (PLATFORM_UART_INPUT_CLOCK_RATE/(baudrate * 16)));
5 UartSetBaudRate(brate);
6 return Platform_EOK;
7 }
|
|