微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > DSP学习交流 > +TMS320C6748第一个程序跑马灯+基本程序的调试运行方法

+TMS320C6748第一个程序跑马灯+基本程序的调试运行方法

时间:10-02 整理:3721RD 点击:
上个星期做完开箱后就忙的要死,今天总算是忙里偷闲的体验了一下广州创龙的这块板子。运行了第一个程序。点亮LED灯。
这次实验用到的是创龙公司提供的GPIO_LED程序。
首先,用CCS5.1打开程序
在CCS界面左边的工作空间列表单击右键,选择import。选择Existing CCS Eclipse projects。然后打开你选择你的工程所在的文件夹,CCS会自动识别该文件夹下的工程文件,选择自己需要的文件打开。在这里我们选择的是GPIO_LED。



GPIO_LED程序主要是通过对LED灯正极输出高电平来使LED发光二极管导通。这个程序的重点在于控制GPIO口输出高低电平。
在TMS320C6748中,对GPIO的配置主要有四个步骤
1. 使能通用输入输出端口外设(GPIO);
2. 配置GPIO口为普通GPIO,在这里我们只需要配置LED所在的GPIO00、GPIO01、GPIO02、GPIO05;
3. 配置GPIO口的输入输出。在这里我们配置为输出;
4. 配置GPIO口的高低电平。我们这里控制LED灯高电平为亮,低电平为灭。


在编程过程中我们使用了StarterWare库,使用StarterWare库可以让我们避免去直接操作寄存器,降低了开发难度,提高了开发效率。其他好处大家都知道这里就不多说了


废话不说了

  1. #include "TL6748.h"                 // 创龙 DSP6748 开发板相关声明

  2. #include "hw_types.h"               // 宏命令
  3. #include "hw_syscfg0_C6748.h"       // 系统配置模块寄存器
  4. #include "soc_C6748.h"              // DSP C6748 外设寄存器

  5. #include "psc.h"                    // 电源与睡眠控制宏及设备抽象层函数声明
  6. #include "gpio.h"                   // 通用输入输出口宏及设备抽象层函数声明

  7. /****************************************************************************/
  8. /*                                                                          */
  9. /*              宏定义                                                      */
  10. /*                                                                          */
  11. /****************************************************************************/
  12. // 软件断点
  13. #define SW_BREAKPOINT   asm(" SWBP 0 ");

  14. /****************************************************************************/
  15. /*                                                                          */
  16. /*              全局变量                                                    */
  17. /*                                                                          */
  18. /****************************************************************************/

  19. /****************************************************************************/
  20. /*                                                                          */
  21. /*              函数声明                                                    */
  22. /*                                                                          */
  23. /****************************************************************************/
  24. // 外设使能配置
  25. void PSCInit(void);
  26. // GPIO 管脚复用配置
  27. void GPIOBankPinMuxSet();
  28. // GPIO 管脚初始化
  29. void GPIOBankPinInit();
  30. // 延时
  31. void Delay(unsigned int n);

  32. /****************************************************************************/
  33. /*                                                                          */
  34. /*              主函数                                                      */
  35. /*                                                                          */
  36. /****************************************************************************/
  37. int main(void)
  38. {
  39.         // 外设使能配置
  40.         PSCInit();

  41.         // GPIO 管脚复用配置
  42.         GPIOBankPinMuxSet();

  43.         // GPIO 管脚初始化
  44.         GPIOBankPinInit();

  45.         // 主循环
  46.         for(;;)
  47.         {
  48.                 // 延时
  49.                 Delay(0x00FFFFFF);
  50.             GPIOPinWrite(SOC_GPIO_0_REGS, 3, GPIO_PIN_LOW);    // D10 灭 GPIO0[2]
  51.                 GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_HIGH);   // D7  亮 GPIO0[0]

  52.                 // 延时
  53.                 Delay(0x00FFFFFF);
  54.                 GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_LOW);    // D7  灭 GPIO0[0]
  55.                 GPIOPinWrite(SOC_GPIO_0_REGS, 6, GPIO_PIN_HIGH);   // D6  亮 GPIO0[5]

  56.                 // 延时
  57.                 Delay(0x00FFFFFF);
  58.                 GPIOPinWrite(SOC_GPIO_0_REGS, 6, GPIO_PIN_LOW);    // D6  灭 GPIO0[5]
  59.                 GPIOPinWrite(SOC_GPIO_0_REGS, 2, GPIO_PIN_HIGH);   // D9  亮 GPIO0[1]

  60.                 // 延时
  61.                 Delay(0x00FFFFFF);
  62.                 GPIOPinWrite(SOC_GPIO_0_REGS, 2, GPIO_PIN_LOW);    // D9  灭 GPIO0[1]
  63.                 GPIOPinWrite(SOC_GPIO_0_REGS, 3, GPIO_PIN_HIGH);   // D10 亮 GPIO0[2]
  64.         }
  65. }

  66. /****************************************************************************/
  67. /*                                                                          */
  68. /*              PSC 初始化                                                  */
  69. /*                                                                          */
  70. /****************************************************************************/
  71. void PSCInit(void)
  72. {
  73.         // 使能 GPIO 模块
  74.         // 对相应外设模块的使能也可以在 BootLoader 中完成
  75.     PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
  76. }

  77. /****************************************************************************/
  78. /*                                                                          */
  79. /*              GPIO 管脚复用配置                                           */
  80. /*                                                                          */
  81. /****************************************************************************/
  82. void GPIOBankPinMuxSet(void)
  83. {
  84.         // 配置相应的 GPIO 口功能为普通输入输出口
  85.         // 底板 LED
  86.         GPIOBank0Pin0PinMuxSetup();
  87.         GPIOBank0Pin1PinMuxSetup();
  88.         GPIOBank0Pin2PinMuxSetup();
  89.         GPIOBank0Pin5PinMuxSetup();
  90. }

  91. /****************************************************************************/
  92. /*                                                                          */
  93. /*              GPIO 管脚初始化                                             */
  94. /*                                                                          */
  95. /****************************************************************************/
  96. void GPIOBankPinInit(void)
  97. {
  98.         // 配置 LED 对应管脚为输出管脚
  99.     // OMAPL138 及 DSP C6748 共有 144 个 GPIO
  100.         // 以下为各组 GPIO BANK 起始管脚对应值
  101.     // 范围 1-144
  102.         // GPIO0[0] 1
  103.     // GPIO1[0] 17
  104.         // GPIO2[0] 33
  105.     // GPIO3[0] 49
  106.         // GPIO4[0] 65
  107.     // GPIO5[0] 81
  108.         // GPIO6[0] 97
  109.         // GPIO7[0] 113
  110.         // GPIO8[0] 129

  111.         // 核心板 LED
  112.     GPIODirModeSet(SOC_GPIO_0_REGS, 109, GPIO_DIR_OUTPUT);  // GPIO6[12]
  113.     GPIODirModeSet(SOC_GPIO_0_REGS, 110, GPIO_DIR_OUTPUT);  // GPIO6[13]

  114.     // 底板 LED
  115.     GPIODirModeSet(SOC_GPIO_0_REGS, 1, GPIO_DIR_OUTPUT);    // D7  GPIO0[0]
  116.     GPIODirModeSet(SOC_GPIO_0_REGS, 2, GPIO_DIR_OUTPUT);    // D9  GPIO0[1]
  117.     GPIODirModeSet(SOC_GPIO_0_REGS, 3, GPIO_DIR_OUTPUT);    // D10 GPIO0[2]
  118.     GPIODirModeSet(SOC_GPIO_0_REGS, 6, GPIO_DIR_OUTPUT);    // D6  GPIO0[5]
  119. }

  120. /****************************************************************************/
  121. /*                                                                          */
  122. /*              延时                                                        */
  123. /*                                                                          */
  124. /****************************************************************************/
  125. void Delay(unsigned int n)
  126. {
  127.         unsigned int i;

  128.         for(i=n;i>0;i--);
  129. }

复制代码




在这里插入一个CCS的使用技巧,对于程序中繁多的函数,我们可以通过按住Ctrl+单击程序的方法来直接查询程序的定义。

下面介绍一下GPIO配置是用到的库函数及其作用
PSCModuleControl()   使能相应的外设模块。在这里我们只使能了GPIO0一个模块。
GPIOBank0Pin0PinMuxSetup( )    配置GPIO00为普通输入输出口。其他引脚也是一样。
GPIODirModeSet()   设置管脚的方向
GPIODirModeSet(SOC_GPIO_0_REGS, 1, GPIO_DIR_OUTPUT);   设置GPIO00为输出口。
GPIOPinWrite()    改变当前管脚状态。
GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_LOW);  GPIO00输出低电平。
GPIOPinRead()    读取当前管脚状态。
目前点亮LED灯就用到了这些库函数,如果大家还需要使用别的GPIO功能,可以在gpio.h头文件中查看。
程序编写完成后,我们可以通过DEBUG模式调试程序。
首先保证硬件连接正确。如图。JTAG接口是有指向性的所以不要担心连接错误。
配置.ccxml文件:双击工作空间中的XDS100V2.ccxml文件。
因为创龙寄来的是XDS100V3的仿真器,所以选择Texas Instruments XDS100V3 USB Emulator。下面选择TMS320C6748。点击SAVE。点击test connection。 会显示JATG连接成功。


右击工程选择build project
状态栏显示已近建立了GPIO_LED.out 文件**** Build Finished ****。说明我们程序没有问题。
单击菜单栏RUN--DEBUG   
程序进入DEBUG模式。
运行GEL:
右击工程文件,选择OPEN GEL fire view
界面右下角会出现一个GEL的对话框   在哪里右击选择load GEL添加GEL文件。我添加的是创龙公司的Tronlong_C6748.gel
然后点击菜单栏Scripts选择初始化。


最后 点击RESUME就可以调试运行程序,看到开发板上LED灯依次被点亮。



在右上角点击Registers可以看到寄存器配置状态



累死了。完全手打,大家支持一下吧。第一个程序所以写的比较详细。

最后我还遇到一个问题解决不了
就是我想把程序烧入DSP芯片内。已近生成了GPIO_LED.ais 文件。然后在DEBUG模式下烧录
最后出现的结果也是和别人一样如下图
可是并没有实现功能
请大神们指点一下吧。









大神啊,写的很详细,值得学习!

你用什么方式生成ais文件的。我刚好也做到这个,可以交流交流~

有一个AISgen_d800k008.exe的软件   在创龙的光盘里有   

具体路径,创龙DSP\TL6748-EVM-data\demo\HostApp\HexAIS_sfh_slh
共同学习吧

我做成啦,问问你哪里失败了

NandFlash的烧写@擦肩的阳光 已经实现了,你可以参考一下他的帖子【TL6748 DSP试用体验】+几种基本的程序下载和烧写办法总结 另外,建议小编将代码使用论坛的" "功能编辑会使得帖子更为整洁。

好的,谢谢提醒

我看了你发的帖子,有几个问题。
1. 我和你一样遇到了V2和V3的仿真器的问题。但是我除了更改了ccxml文件以外没有做别的,但是可以成功连接并可以debug调试运行,那个psc.c我也没有用到啊。不知道有没有什么问题。
2. 我也是使用的C6748_NandWrite.out文件。但是你可以看到我的console里显示结果和你不是完全一样。不知道有没有什么问题。
不过刚刚按照你的的教程,我发现我的开发板的拨码开关1~5号没有对应拨到01110档位。然后拨到01110上电程序就运行了。说明昨天就烧进去了但是还是看的不仔细没拨拨码开关。

楼上用的V3啊
我用的V2的

程序下载仿真 跟仿真器的类型无关吧

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top