• dsp6657的串口学习


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

    2. 进入这个目录没找到串口的C库文件?只能去其他工程看下为啥了。确实没有,其他工程用的是这两个初始化的

    1 platform_uart_init();
    2 platform_uart_set_baudrate(19200);

    3. DSP6657有2个串口,支持流控可选

    4. 搞定头文件的路径,还有库的路径D: ipdk_C6657_1_1_1_4packages iplatformevmc6657lplatform_liblibdebug i.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 
    ", baudrate));
    4     brate = ((Uint16) (PLATFORM_UART_INPUT_CLOCK_RATE/(baudrate * 16)));
    5     UartSetBaudRate(brate);
    6     return Platform_EOK;
    7 }
  • 相关阅读:
    配合网页滚屏播放,做解说词
    @enable跟@import注解
    组合注解与元注解
    Spring Aware
    https的设计原理
    用信鸽来解释 HTTPS
    http三次握手四次挥手
    一致性哈希
    redis cluster原理
    redis cluster集群搭建
  • 原文地址:https://www.cnblogs.com/429512065qhq/p/8179621.html
Copyright © 2020-2023  润新知