【创龙TMS320C6748开发板试用】广州创龙DSP TL6748的第一个点灯程序

2019-07-15 18:59发布

纠结了几天,是应该先写一些自己零基础学习DSP的步骤还是直接奔着预定的项目去,现在还是先写写自己的一些学习经验吧。
首先我今天准备点一个灯,并在串口打印,按键可以控制灯的开始暂停等,串口也可以控制开始和暂停。首先需要看清这个任务的实质:1,点灯;2,按键控制;3,串口。所以,需要在官方给出的三个程序中的一个进行修改,我就是从led那个例程开始修改的。
首先打开工程,导入StarterWare(这个是ti给的不带操作系统的裸机驱动库,按照给的学习例程学习TMS320C6748会快很多)。按照教程导入“TMS320C6748.ccxml”文件,导入创龙给的gel文件,右键连接调试器。连接成功后如下图:
debug.jpg
打开导入的工程“GPIO_LED”,并打开其中的main.c文件:
project.jpg
首先我将原先的代码修改了一下,就是将底板和核心板上的六个LED全部依次点亮,具体的代码是:
  1. /****************************************************************************/
  2. /*                                                                          */
  3. /*              底板 LED 测试                                               */
  4. /*                                                                          */
  5. /*              2014年04月20日                                              */
  6. /*                                                                          */
  7. /****************************************************************************/
  8. #include "TL6748.h"                 // 创龙 DSP6748 开发板相关声明

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

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

  14. /****************************************************************************/
  15. /*                                                                          */
  16. /*              宏定义                                                      */
  17. /*                                                                          */
  18. /****************************************************************************/
  19. // 软件断点
  20. #define SW_BREAKPOINT   asm(" SWBP 0 ");

  21. /****************************************************************************/
  22. /*                                                                          */
  23. /*              全局变量                                                    */
  24. /*                                                                          */
  25. /****************************************************************************/

  26. /****************************************************************************/
  27. /*                                                                          */
  28. /*              函数声明                                                    */
  29. /*                                                                          */
  30. /****************************************************************************/
  31. // 外设使能配置
  32. void PSCInit(void);
  33. // GPIO 管脚复用配置
  34. void GPIOBankPinMuxSet();
  35. // GPIO 管脚初始化
  36. void GPIOBankPinInit();
  37. // 延时
  38. void Delay(unsigned int n);

  39. /****************************************************************************/
  40. /*                                                                          */
  41. /*              主函数                                                      */
  42. /*                                                                          */
  43. /****************************************************************************/
  44. int main(void)
  45. {
  46.         // 外设使能配置
  47.         PSCInit();

  48.         // GPIO 管脚复用配置
  49.         GPIOBankPinMuxSet();

  50.         // GPIO 管脚初始化
  51.         GPIOBankPinInit();

  52.         // 主循环
  53.         for(;;)
  54.         {
  55.                 // 延时
  56.                 Delay(0x00FFFFFF);
  57.             GPIOPinWrite(SOC_GPIO_0_REGS, 3, GPIO_PIN_LOW);    // D10 灭 GPIO0[2]
  58.                 GPIOPinWrite(SOC_GPIO_0_REGS, 2, GPIO_PIN_HIGH);   // D7  亮 GPIO0[0]

  59.                 // 延时
  60.                 Delay(0x00FFFFFF);
  61.                 GPIOPinWrite(SOC_GPIO_0_REGS, 2, GPIO_PIN_LOW);    // D7  灭 GPIO0[0]
  62.                 GPIOPinWrite(SOC_GPIO_0_REGS, 6, GPIO_PIN_HIGH);   // D6  亮 GPIO0[5]

  63.                 // 延时
  64.                 Delay(0x00FFFFFF);
  65.                 GPIOPinWrite(SOC_GPIO_0_REGS, 6, GPIO_PIN_LOW);    // D6  灭 GPIO0[5]
  66.                 GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_HIGH);   // D9  亮 GPIO0[1]

  67.                 // 延时
  68.                 Delay(0x00FFFFFF);
  69.                 GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_LOW);    // D6  灭 GPIO0[5]
  70.                 GPIOPinWrite(SOC_GPIO_0_REGS, 110, GPIO_PIN_HIGH);   // D9  亮 GPIO0[1]

  71.                 // 延时
  72.                 Delay(0x00FFFFFF);
  73.                 GPIOPinWrite(SOC_GPIO_0_REGS, 110, GPIO_PIN_LOW);    // D9  灭 GPIO0[1]
  74.                 GPIOPinWrite(SOC_GPIO_0_REGS, 109, GPIO_PIN_HIGH);   // D10 亮 GPIO0[2]

  75.                 // 延时
  76.                 Delay(0x00FFFFFF);
  77.                 GPIOPinWrite(SOC_GPIO_0_REGS, 109, GPIO_PIN_LOW);    // D9  灭 GPIO0[1]
  78.                 GPIOPinWrite(SOC_GPIO_0_REGS, 3, GPIO_PIN_HIGH);   // D10 亮 GPIO0[2]
  79.         }
  80. }

  81. /****************************************************************************/
  82. /*                                                                          */
  83. /*              PSC 初始化                                                  */
  84. /*                                                                          */
  85. /****************************************************************************/
  86. void PSCInit(void)
  87. {
  88.         // 使能 GPIO 模块
  89.         // 对相应外设模块的使能也可以在 BootLoader 中完成
  90.     PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
  91. }

  92. /****************************************************************************/
  93. /*                                                                          */
  94. /*              GPIO 管脚复用配置                                           */
  95. /*                                                                          */
  96. /****************************************************************************/
  97. void GPIOBankPinMuxSet(void)
  98. {
  99.         // 配置相应的 GPIO 口功能为普通输入输出口
  100.         // 底板 LED
  101.         GPIOBank0Pin0PinMuxSetup();
  102.         GPIOBank0Pin1PinMuxSetup();
  103.         GPIOBank0Pin2PinMuxSetup();
  104.         GPIOBank0Pin5PinMuxSetup();
  105. }

  106. /****************************************************************************/
  107. /*                                                                          */
  108. /*              GPIO 管脚初始化                                             */
  109. /*                                                                          */
  110. /****************************************************************************/
  111. void GPIOBankPinInit(void)
  112. {
  113.         // 配置 LED 对应管脚为输出管脚
  114.     // OMAPL138 及 DSP C6748 共有 144 个 GPIO
  115.         // 以下为各组 GPIO BANK 起始管脚对应值
  116.     // 范围 1-144
  117.         // GPIO0[0] 1
  118.     // GPIO1[0] 17
  119.         // GPIO2[0] 33
  120.     // GPIO3[0] 49
  121.         // GPIO4[0] 65
  122.     // GPIO5[0] 81
  123.         // GPIO6[0] 97
  124.         // GPIO7[0] 113
  125.         // GPIO8[0] 129

  126.         // 核心板 LED
  127.     GPIODirModeSet(SOC_GPIO_0_REGS, 109, GPIO_DIR_OUTPUT);  // GPIO6[12]
  128.     GPIODirModeSet(SOC_GPIO_0_REGS, 110, GPIO_DIR_OUTPUT);  // GPIO6[13]

  129.     // 底板 LED
  130.     GPIODirModeSet(SOC_GPIO_0_REGS, 1, GPIO_DIR_OUTPUT);    // D7  GPIO0[0]
  131.     GPIODirModeSet(SOC_GPIO_0_REGS, 2, GPIO_DIR_OUTPUT);    // D9  GPIO0[1]
  132.     GPIODirModeSet(SOC_GPIO_0_REGS, 3, GPIO_DIR_OUTPUT);    // D10 GPIO0[2]
  133.     GPIODirModeSet(SOC_GPIO_0_REGS, 6, GPIO_DIR_OUTPUT);    // D6  GPIO0[5]
  134. }

  135. /****************************************************************************/
  136. /*                                                                          */
  137. /*              延时                                                        */
  138. /*                                                                          */
  139. /****************************************************************************/
  140. void Delay(unsigned int n)
  141. {
  142.         unsigned int i;

  143.         for(i=n;i>0;i--);
  144. }
复制代码将这个代码编译一下:右键工程选择编译当前的工程,就可以生成可执行的.out文件。
生成的可执行文件在对应工程的debug目录下面而不是“Binary”目录下面(这个问题找了一下,才发现的。。T_T)。
点击“Run”-》“Load”-》“Load Program”,选择刚才生成的GPIO_LED.out:
load.jpg
loadload.jpg
点击OK以后刚才生成的.out文件就可以开始调试了,点击debug选项卡里面的执行按钮:
goit.jpg
就可以看到TL6748板子上的六个LED依次闪烁了。
需要说明的是,这种执行的方法是在只能在debug模式看到对应的现象,如果断电重启的话,代码就被清空了,所以如果代码需要在每次上电的时候能够开始执行的话,我们需要将其写入flash中,这个过程在创龙的用户手册上有详细的描述,如果有什么迷惑的地方的话留言给我,我们相互探讨一下。




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
michael_llh
1楼-- · 2019-07-15 21:02
注释的很详细,谢谢楼主的分享
鸿宇
2楼-- · 2019-07-15 21:50
下面是在“GPIO_KEY”工程下修改的通过按键控制流水灯的开始和暂停的代码:
  1. /****************************************************************************/
  2. /*                                                                          */
  3. /*              按键中断测试                                                */
  4. /*                                                                          */
  5. /*              2014年4月20日                                               */
  6. /*                                                                          */
  7. /****************************************************************************/
  8. #include "TL6748.h"                 // 创龙 DSP6748 开发板相关声明

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

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

  14. #include "interrupt.h"              // DSP C6748 中断相关应用程序接口函数声明及系统事件号定义

  15. /****************************************************************************/
  16. /*                                                                          */
  17. /*              宏定义                                                      */
  18. /*                                                                          */
  19. /****************************************************************************/
  20. // 软件断点
  21. #define SW_BREAKPOINT   asm(" SWBP 0 ");

  22. /****************************************************************************/
  23. /*                                                                          */
  24. /*              全局变量                                                    */
  25. /*                                                                          */
  26. /****************************************************************************/
  27. unsigned char Flag=0;

  28. /****************************************************************************/
  29. /*                                                                          */
  30. /*              函数声明                                                    */
  31. /*                                                                          */
  32. /****************************************************************************/
  33. // 外设使能配置
  34. void PSCInit(void);

  35. // GPIO 管脚复用配置
  36. void GPIOBankPinMuxSet();
  37. // GPIO 管脚初始化
  38. void GPIOBankPinInit();
  39. // GPIO 管脚中断初始化
  40. void GPIOBankPinInterruptInit(void);

  41. // DSP 中断初始化
  42. void InterruptInit(void);
  43. // 中断服务函数
  44. void USER0KEYIsr(void);
  45. void USER1KEYIsr(void);

  46. /****************************************************************************/
  47. /*                                                                          */
  48. /*              主函数                                                      */
  49. /*                                                                          */
  50. /****************************************************************************/

  51. void delay(unsigned int count)
  52. {
  53.         unsigned int i,j;
  54.         for(j=0;j<count;j++)
  55.                 for(i=0x003FFFFF;i>0;i--);                          // 延时
  56. }
  57. int main(void)
  58. {
  59.         // 外设使能配置
  60.         PSCInit();
  61.        
  62.         // GPIO 管脚复用配置
  63.         GPIOBankPinMuxSet();

  64.         // GPIO 管脚初始化
  65.         GPIOBankPinInit();

  66.         // DSP 中断初始化
  67.         InterruptInit();

  68.         // GPIO 管脚中断初始化
  69.         GPIOBankPinInterruptInit();

  70.         // 主循环
  71.         for(;;)
  72.         {
  73.                 // 亦可以使用查询法查询中断状态

  74.                 if(Flag)
  75.                 {
  76.                         // 核心板 LED
  77.                         delay(1);
  78.                         GPIOPinWrite(SOC_GPIO_0_REGS, 110, GPIO_PIN_LOW);
  79.                         GPIOPinWrite(SOC_GPIO_0_REGS, 109, GPIO_PIN_HIGH);
  80.                         GPIOPinWrite(SOC_GPIO_0_REGS, 3, GPIO_PIN_HIGH);

  81.                         delay(1);
  82.                         GPIOPinWrite(SOC_GPIO_0_REGS, 109, GPIO_PIN_LOW);
  83.                         GPIOPinWrite(SOC_GPIO_0_REGS, 3, GPIO_PIN_HIGH);
  84.                         GPIOPinWrite(SOC_GPIO_0_REGS, 2, GPIO_PIN_HIGH);

  85.                         delay(1);
  86.                         GPIOPinWrite(SOC_GPIO_0_REGS, 3, GPIO_PIN_LOW);
  87.                         GPIOPinWrite(SOC_GPIO_0_REGS, 2, GPIO_PIN_HIGH);
  88.                         GPIOPinWrite(SOC_GPIO_0_REGS, 6, GPIO_PIN_HIGH);

  89.                         delay(1);
  90.                         GPIOPinWrite(SOC_GPIO_0_REGS, 2, GPIO_PIN_LOW);
  91.                         GPIOPinWrite(SOC_GPIO_0_REGS, 6, GPIO_PIN_HIGH);
  92.                         GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_HIGH);

  93.                         delay(1);
  94.                         GPIOPinWrite(SOC_GPIO_0_REGS, 6, GPIO_PIN_LOW);
  95.                         GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_HIGH);
  96.                         GPIOPinWrite(SOC_GPIO_0_REGS, 110, GPIO_PIN_HIGH);

  97.                         delay(1);
  98.                         GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_LOW);
  99.                         GPIOPinWrite(SOC_GPIO_0_REGS, 110, GPIO_PIN_HIGH);
  100.                         GPIOPinWrite(SOC_GPIO_0_REGS, 109, GPIO_PIN_HIGH);
  101.                 }
  102.         }
  103. }

  104. /****************************************************************************/
  105. /*                                                                          */
  106. /*              PSC 初始化                                                  */
  107. /*                                                                          */
  108. /****************************************************************************/
  109. void PSCInit(void)
  110. {
  111.         // 使能 GPIO 模块
  112.         // 对相应外设模块的使能也可以在 BootLoader 中完成
  113.     PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
  114. }

  115. /****************************************************************************/
  116. /*                                                                          */
  117. /*              GPIO 管脚复用配置                                           */
  118. /*                                                                          */
  119. /****************************************************************************/
  120. void GPIOBankPinMuxSet(void)
  121. {
  122.         // 配置相应的 GPIO 口功能为普通输入输出口
  123.         // 核心板 LED
  124.         GPIOBank6Pin12PinMuxSetup();
  125.         GPIOBank6Pin13PinMuxSetup();

  126.         // 底板 LED
  127.         GPIOBank0Pin0PinMuxSetup();
  128.         GPIOBank0Pin1PinMuxSetup();
  129.         GPIOBank0Pin2PinMuxSetup();
  130.         GPIOBank0Pin5PinMuxSetup();

  131.         // 底板按键
  132.         GPIOBank0Pin6PinMuxSetup();
  133.         GPIOBank6Pin1PinMuxSetup();
  134. }

  135. /****************************************************************************/
  136. /*                                                                          */
  137. /*              GPIO 管脚初始化                                             */
  138. /*                                                                          */
  139. /****************************************************************************/
  140. void GPIOBankPinInit(void)
  141. {
  142.         // 配置 LED 对应管脚为输出管脚
  143.     // OMAPL138 及 DSP C6748 共有 144 个 GPIO
  144.         // 以下为各组 GPIO BANK 起始管脚对应值
  145.     // 范围 1-144
  146.         // GPIO0[0] 1
  147.     // GPIO1[0] 17
  148.         // GPIO2[0] 33
  149.     // GPIO3[0] 49
  150.         // GPIO4[0] 65
  151.     // GPIO5[0] 81
  152.         // GPIO6[0] 97
  153.         // GPIO7[0] 113
  154.         // GPIO8[0] 129

  155.         // 核心板 LED
  156.     GPIODirModeSet(SOC_GPIO_0_REGS, 109, GPIO_DIR_OUTPUT);  // GPIO6[12]
  157.     GPIODirModeSet(SOC_GPIO_0_REGS, 110, GPIO_DIR_OUTPUT);  // GPIO6[13]

  158.     // 底板 LED
  159.     GPIODirModeSet(SOC_GPIO_0_REGS, 1, GPIO_DIR_OUTPUT);    // D7  GPIO0[0]
  160.     GPIODirModeSet(SOC_GPIO_0_REGS, 2, GPIO_DIR_OUTPUT);    // D9  GPIO0[1]
  161.     GPIODirModeSet(SOC_GPIO_0_REGS, 3, GPIO_DIR_OUTPUT);    // D10 GPIO0[2]
  162.     GPIODirModeSet(SOC_GPIO_0_REGS, 6, GPIO_DIR_OUTPUT);    // D6  GPIO0[5]

  163.     // 底板按键
  164.     GPIODirModeSet(SOC_GPIO_0_REGS, 7, GPIO_DIR_INPUT);     // USER0 KEY GPIO0[6]
  165.     GPIODirModeSet(SOC_GPIO_0_REGS, 98, GPIO_DIR_INPUT);    // USER1 KEY GPIO6[1]
  166. }

  167. /****************************************************************************/
  168. /*                                                                          */
  169. /*              GPIO 管脚中断初始化                                         */
  170. /*                                                                          */
  171. /****************************************************************************/
  172. void GPIOBankPinInterruptInit(void)
  173. {
  174.     // 底板按键中断
  175.     // 配置 USER0 KEY GPIO0[6] 为下降沿触发
  176.     GPIOIntTypeSet(SOC_GPIO_0_REGS, 7, GPIO_INT_TYPE_FALLEDGE);
  177.     // 配置 USER1 KEY GPIO6[1] 为上升沿及下降沿触发
  178.     GPIOIntTypeSet(SOC_GPIO_0_REGS, 98, GPIO_INT_TYPE_BOTHEDGE);

  179.     // 使能 GPIO BANK 中断
  180.     GPIOBankIntEnable(SOC_GPIO_0_REGS, 0);                  // USER0 KEY GPIO0
  181.     GPIOBankIntEnable(SOC_GPIO_0_REGS, 6);                  // USER1 KEY GPIO6

  182.         // 注册中断服务函数
  183.         IntRegister(C674X_MASK_INT4, USER0KEYIsr);
  184.         IntRegister(C674X_MASK_INT5, USER1KEYIsr);

  185.         // 映射中断到 DSP 可屏蔽中断
  186.         IntEventMap(C674X_MASK_INT4, SYS_INT_GPIO_B0INT);
  187.         IntEventMap(C674X_MASK_INT5, SYS_INT_GPIO_B6INT);

  188.         // 使能 DSP 可屏蔽中断
  189.         IntEnable(C674X_MASK_INT4);
  190.         IntEnable(C674X_MASK_INT5);
  191. }

  192. /****************************************************************************/
  193. /*                                                                          */
  194. /*              DSP 中断初始化                                              */
  195. /*                                                                          */
  196. /****************************************************************************/
  197. void InterruptInit(void)
  198. {
  199.         // 初始化 DSP 中断控制器
  200.         IntDSPINTCInit();

  201.         // 使能 DSP 全局中断
  202.         IntGlobalEnable();
  203. }

  204. /****************************************************************************/
  205. /*                                                                          */
  206. /*              中断服务函数                                                */
  207. /*                                                                          */
  208. /****************************************************************************/
  209. void USER0KEYIsr(void)
  210. {
  211.         // 软件断点 方便调试
  212.         //SW_BREAKPOINT;

  213.     // 禁用 GPIO BANK 0 中断
  214.     GPIOBankIntDisable(SOC_GPIO_0_REGS, 0);

  215.     // 清除 GPIO BANK 0 中断状态
  216.     IntEventClear(SYS_INT_GPIO_B0INT);

  217.     if(GPIOPinIntStatus(SOC_GPIO_0_REGS, 7) == GPIO_INT_PEND)
  218.     {
  219.                 // 清除 GPIO0[6] 中断状态
  220.                 GPIOPinIntClear(SOC_GPIO_0_REGS, 7);

  221.                 Flag=1;
  222.     }
  223.        
  224.         // 使能 GPIO BANK 0 中断
  225.     GPIOBankIntEnable(SOC_GPIO_0_REGS, 0);
  226. }

  227. void USER1KEYIsr(void)
  228. {
  229.         // 软件断点 方便调试
  230.         //SW_BREAKPOINT;

  231.     // 禁用 GPIO BANK 6 中断
  232.     GPIOBankIntDisable(SOC_GPIO_0_REGS, 6);

  233.     // 清除 GPIO BANK 6 中断状态
  234.     IntEventClear(SYS_INT_GPIO_B6INT);

  235.     if(GPIOPinIntStatus(SOC_GPIO_0_REGS, 98) == GPIO_INT_PEND)
  236.     {
  237.                 // 清除 GPIO6[1] 中断状态
  238.                 GPIOPinIntClear(SOC_GPIO_0_REGS, 98);
  239.        
  240.                 Flag=0;
  241.     }

  242.         // 使能 GPIO BANK 6 中断
  243.     GPIOBankIntEnable(SOC_GPIO_0_REGS, 6);
  244. }
复制代码
鸿宇
3楼-- · 2019-07-16 01:15
鸿宇 发表于 2015-9-27 19:52
下面是在“GPIO_KEY”工程下修改的通过按键控制流水灯的开始和暂停的代码:

通过底板上的SW5 USER0开始流水灯,通过SW6 USER1暂停流水灯。
鸿宇
4楼-- · 2019-07-16 02:07
michael_llh 发表于 2015-9-27 19:13
注释的很详细,谢谢楼主的分享

这个注释不是我写的,是创龙官方给的例程,我只是在他们的基础上稍微做了修改的
鸿宇
5楼-- · 2019-07-16 02:59
 精彩回答 2  元偷偷看……
tmmdh
6楼-- · 2019-07-16 03:58
怎样查看诸如GPIOBank0Pin0PinMuxSetup();这类函数是怎样实现的啊?代码中只能看到声明!

一周热门 更多>