微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > DSP学习交流 > + 建立基于C文件的工程

+ 建立基于C文件的工程

时间:10-02 整理:3721RD 点击:
背景
光盘中的例程都是静态库,除了个main.c就没有其他的C文件了。


这是因为创龙把这些C文件全都做成了静态库,工程中只要包含了这个库就行了。这也是为什么在建工程时,创龙的视频是要把output format设为eabi(ELF)的原因。


还有一些是创龙自己的函数,在TL6748.h中有声明,但是找不到源码文件。
就如LED的例子中,这些函数都在TL6748.h中,也找不到源码。
对于初学者还是要了解其中的寄存器操作还是很必要的吧。

  1. void GPIOBankPinMuxSet(void)
  2. {
  3.         // 配置相应的 GPIO 口功能为普通输入输出口
  4.         // 底板 LED
  5.         GPIOBank0Pin0PinMuxSetup();
  6.         GPIOBank0Pin1PinMuxSetup();
  7.         GPIOBank0Pin2PinMuxSetup();
  8.         GPIOBank0Pin5PinMuxSetup();
  9. }

复制代码

找到函数定义只能找到头文件,但对于函数是怎么实现的,就无法找到具体的操作方法。对于学习而言还是要知道其所以然的吧。所以自己就以LED的例子为例,建立一个由C文件组成的工程。
正文
一、新建一个只有main.c的空工程,这里就可以按视频中的方法建,或按自己的习惯建都行。
二、安装了C6748_StarterWare_1_20_04_01后,从其中复制出drivers中的gpio.c与psc.c,为了方便把所有的include文件复制到工程目录,还有cmd文件,与ccxml文件,这两个可以用创龙的,也可以自己新建。

这是CCS安装目录中的StarterWare。



这是CCS中工程的结构,头文件太多,显示不全。


三、至于main文件,就直接用例程中的那个吧,可以把内容复制过来。去掉TL6748.h。
四、添加GPIO复用设置函数。上面提到的创龙的那四个函数,我又加上了核心板上的那两个LED的GPIO设置,光盘中的例程没对这两个GPIO设置,所以上电后这两个LED是微亮的。

  1. #define PINMUX1_GPIO0_0_ENABLE    (SYSCFG_PINMUX1_PINMUX1_31_28_GPIO0_0  << \
  2.                                     SYSCFG_PINMUX1_PINMUX1_31_28_SHIFT)
  3. #define PINMUX1_GPIO0_1_ENABLE    (SYSCFG_PINMUX1_PINMUX1_27_24_GPIO0_1  << \
  4.                                     SYSCFG_PINMUX1_PINMUX1_27_24_SHIFT)
  5. #define PINMUX1_GPIO0_2_ENABLE    (SYSCFG_PINMUX1_PINMUX1_23_20_GPIO0_2  << \
  6.                                     SYSCFG_PINMUX1_PINMUX1_23_20_SHIFT)
  7. #define PINMUX1_GPIO0_5_ENABLE    (SYSCFG_PINMUX1_PINMUX1_11_8_GPIO0_5  << \
  8.                                     SYSCFG_PINMUX1_PINMUX1_11_8_SHIFT)
  9. void GPIOBank0Pin0PinMuxSetup(void)
  10. {
  11.         unsigned int savePinmux = 0;
  12.         savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) &
  13.                            ~(SYSCFG_PINMUX1_PINMUX1_31_28));
  14.         HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) =
  15.                    (PINMUX1_GPIO0_0_ENABLE | savePinmux);
  16. }
  17. void GPIOBank0Pin1PinMuxSetup(void)
  18. {
  19.         unsigned int savePinmux = 0;
  20.         savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) &
  21.                            ~(SYSCFG_PINMUX1_PINMUX1_27_24));
  22.         HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) =
  23.                    (PINMUX1_GPIO0_1_ENABLE | savePinmux);
  24. }
  25. void GPIOBank0Pin2PinMuxSetup(void)
  26. {
  27.         unsigned int savePinmux = 0;
  28.         savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) &
  29.                            ~(SYSCFG_PINMUX1_PINMUX1_23_20));
  30.         HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) =
  31.                    (PINMUX1_GPIO0_2_ENABLE | savePinmux);
  32. }
  33. void GPIOBank0Pin5PinMuxSetup(void)
  34. {
  35.         unsigned int savePinmux = 0;
  36.         savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) &
  37.                            ~(SYSCFG_PINMUX1_PINMUX1_11_8));
  38.         HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) =
  39.                    (PINMUX1_GPIO0_5_ENABLE | savePinmux);
  40. }

  41. #define PINMUX13_GPIO6_12_ENABLE    (SYSCFG_PINMUX13_PINMUX13_15_12_GPIO6_12  << \
  42.                                     SYSCFG_PINMUX13_PINMUX13_15_12_SHIFT)
  43. #define PINMUX13_GPIO6_13_ENABLE    (SYSCFG_PINMUX13_PINMUX13_11_8_GPIO6_13  << \
  44.                                    SYSCFG_PINMUX13_PINMUX13_11_8_SHIFT)
  45. void GPIOBank6Pin12PinMuxSetup(void)
  46. {
  47.      unsigned int savePinmux = 0;
  48.      savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13)) &
  49.                   ~(SYSCFG_PINMUX13_PINMUX13_15_12));
  50.      HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13)) =
  51.           (PINMUX13_GPIO6_12_ENABLE | savePinmux);
  52. }
  53. void GPIOBank6Pin13PinMuxSetup(void)
  54. {
  55.      unsigned int savePinmux = 0;
  56.      savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13)) &
  57.                   ~(SYSCFG_PINMUX13_PINMUX13_11_8));
  58.      HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13)) =
  59.           (PINMUX13_GPIO6_13_ENABLE | savePinmux);
  60. }
  61. void GPIOBankPinMuxSet(void)
  62. {
  63. #if 1
  64.         // 配置相应的 GPIO 口功能为普通输入输出口
  65.         // 底板 LED
  66.         GPIOBank0Pin0PinMuxSetup();
  67.         GPIOBank0Pin1PinMuxSetup();
  68.         GPIOBank0Pin2PinMuxSetup();
  69.         GPIOBank0Pin5PinMuxSetup();
  70.         GPIOBank6Pin12PinMuxSetup();
  71.         GPIOBank6Pin13PinMuxSetup();
  72. #endif
  73. }

复制代码


五、添加头文件路径到工程中。


六、基本完成,编译、烧写下试试。会看到与光盘例程相同的结果,核心板上的两个LED灭了。

建议

一、例程提供C文件版本,更方便学习。其是有官方的C文件,最好创龙自己的也开源出来才好。
二、单GPIO_LED这个工程,程序中是把核心板上的两个LED关了,可以没有设置GPIO为输入输出功能,所以两个LED发微光。

























小编可以附上工程吗~我想建立自己的工程文件老失败,不知道咋办

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

网站地图

Top