1
上个星期做完开箱后就忙的要死,今天总算是忙里偷闲的体验了一下广州创龙的这块板子。运行了第一个程序。点亮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库可以让我们避免去直接操作寄存器,降低了开发难度,提高了开发效率。其他好处大家都知道这里就不多说了
废话不说了
- #include "TL6748.h" // 创龙 DSP6748 开发板相关声明
- #include "hw_types.h" // 宏命令
- #include "hw_syscfg0_C6748.h" // 系统配置模块寄存器
- #include "soc_C6748.h" // DSP C6748 外设寄存器
- #include "psc.h" // 电源与睡眠控制宏及设备抽象层函数声明
- #include "gpio.h" // 通用输入输出口宏及设备抽象层函数声明
- /****************************************************************************/
- /* */
- /* 宏定义 */
- /* */
- /****************************************************************************/
- // 软件断点
- #define SW_BREAKPOINT asm(" SWBP 0 ");
- /****************************************************************************/
- /* */
- /* 全局变量 */
- /* */
- /****************************************************************************/
- /****************************************************************************/
- /* */
- /* 函数声明 */
- /* */
- /****************************************************************************/
- // 外设使能配置
- void PSCInit(void);
- // GPIO 管脚复用配置
- void GPIOBankPinMuxSet();
- // GPIO 管脚初始化
- void GPIOBankPinInit();
- // 延时
- void Delay(unsigned int n);
- /****************************************************************************/
- /* */
- /* 主函数 */
- /* */
- /****************************************************************************/
- int main(void)
- {
- // 外设使能配置
- PSCInit();
- // GPIO 管脚复用配置
- GPIOBankPinMuxSet();
- // GPIO 管脚初始化
- GPIOBankPinInit();
- // 主循环
- for(;;)
- {
- // 延时
- Delay(0x00FFFFFF);
- GPIOPinWrite(SOC_GPIO_0_REGS, 3, GPIO_PIN_LOW); // D10 灭 GPIO0[2]
- GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_HIGH); // D7 亮 GPIO0[0]
- // 延时
- Delay(0x00FFFFFF);
- GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_LOW); // D7 灭 GPIO0[0]
- GPIOPinWrite(SOC_GPIO_0_REGS, 6, GPIO_PIN_HIGH); // D6 亮 GPIO0[5]
- // 延时
- Delay(0x00FFFFFF);
- GPIOPinWrite(SOC_GPIO_0_REGS, 6, GPIO_PIN_LOW); // D6 灭 GPIO0[5]
- GPIOPinWrite(SOC_GPIO_0_REGS, 2, GPIO_PIN_HIGH); // D9 亮 GPIO0[1]
- // 延时
- Delay(0x00FFFFFF);
- GPIOPinWrite(SOC_GPIO_0_REGS, 2, GPIO_PIN_LOW); // D9 灭 GPIO0[1]
- GPIOPinWrite(SOC_GPIO_0_REGS, 3, GPIO_PIN_HIGH); // D10 亮 GPIO0[2]
- }
- }
- /****************************************************************************/
- /* */
- /* PSC 初始化 */
- /* */
- /****************************************************************************/
- void PSCInit(void)
- {
- // 使能 GPIO 模块
- // 对相应外设模块的使能也可以在 BootLoader 中完成
- PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
- }
- /****************************************************************************/
- /* */
- /* GPIO 管脚复用配置 */
- /* */
- /****************************************************************************/
- void GPIOBankPinMuxSet(void)
- {
- // 配置相应的 GPIO 口功能为普通输入输出口
- // 底板 LED
- GPIOBank0Pin0PinMuxSetup();
- GPIOBank0Pin1PinMuxSetup();
- GPIOBank0Pin2PinMuxSetup();
- GPIOBank0Pin5PinMuxSetup();
- }
- /****************************************************************************/
- /* */
- /* GPIO 管脚初始化 */
- /* */
- /****************************************************************************/
- void GPIOBankPinInit(void)
- {
- // 配置 LED 对应管脚为输出管脚
- // OMAPL138 及 DSP C6748 共有 144 个 GPIO
- // 以下为各组 GPIO BANK 起始管脚对应值
- // 范围 1-144
- // GPIO0[0] 1
- // GPIO1[0] 17
- // GPIO2[0] 33
- // GPIO3[0] 49
- // GPIO4[0] 65
- // GPIO5[0] 81
- // GPIO6[0] 97
- // GPIO7[0] 113
- // GPIO8[0] 129
- // 核心板 LED
- GPIODirModeSet(SOC_GPIO_0_REGS, 109, GPIO_DIR_OUTPUT); // GPIO6[12]
- GPIODirModeSet(SOC_GPIO_0_REGS, 110, GPIO_DIR_OUTPUT); // GPIO6[13]
- // 底板 LED
- GPIODirModeSet(SOC_GPIO_0_REGS, 1, GPIO_DIR_OUTPUT); // D7 GPIO0[0]
- GPIODirModeSet(SOC_GPIO_0_REGS, 2, GPIO_DIR_OUTPUT); // D9 GPIO0[1]
- GPIODirModeSet(SOC_GPIO_0_REGS, 3, GPIO_DIR_OUTPUT); // D10 GPIO0[2]
- GPIODirModeSet(SOC_GPIO_0_REGS, 6, GPIO_DIR_OUTPUT); // D6 GPIO0[5]
- }
- /****************************************************************************/
- /* */
- /* 延时 */
- /* */
- /****************************************************************************/
- void Delay(unsigned int n)
- {
- unsigned int i;
- for(i=n;i>0;i--);
- }
复制代码
在这里插入一个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模式下烧录
最后出现的结果也是和别人一样如下图
可是并没有实现功能
请大神们指点一下吧。
|
|