创龙TMS320C6748开发板———GPIO配置深入
2019-07-13 12:50 发布
生成海报
本次实验主要是对板底GPIO进行深入了解并搭建空工程实现流水灯工作。 硬件支持 :底板有四个供用户编程使用的LED灯,分别为D6、D7、D9、D10,对应的GPIO为GPIO[5]、GPIO[0]、GPIO[1]、GPIO[2],电路 原理图如下图所示: 由原理图知,当控制相关GPIO输出高电平时,LED灯亮,而当控制GPIO输出低电平时,LED熄灭。 软件设计: 1.使能GPIO模块 使能GPIO模块是通过外设使能函数 :int PSCModuleControl (unsigned int baseAdd, unsigned int moduleId, unsigned int powerDomain, unsigned int flags) 来实现的
其中参数'baseAdd'为外设使用的内存地;'moduleId' 外设类型,此处为GPIO(其标号为3);'powerDomain' 为未对端口进行操作时端口的初始状态;'flags',逻辑标志,为1时使能外设,为0时外设处于未使能状态 2.配置相应的GPIO口为普通输入输出口,实现管脚复用功能 利用函数GPIOBank0Pin0PinMuxSetup();实现GPIO端口的配置 (ps:内部函数没有办法查看到了)3.GPIO管脚初始化,配置LED对应管脚为输出模式 GPIO端口分配为: 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。其中前半部分为GPIO模块及端口号,后半部分为对应到主控芯片 的引脚好。
本次实验只用到了GPIO_0,故只需对GPIO_0进行初始化。利用函数'void GPIODirModeSet(unsigned int baseAdd, unsigned int pinNumber, unsigned int pinDir)',进行管脚初始化。其中' baseAdd'为外设GPIO在内存中的地址;' pinNumber'为对应的芯片引脚号( D7 GPIO0[0]
对应引脚号为1,GPIO0[5] 对应引脚号为6;' pinDir'为引脚模式设置,本实验中应设为输出模式' GPIO_DIR_OUTPUT ' 至此,GPIO端口配置初始化完成,通过函数'void GPIOPinWrite(unsigned int baseAdd, unsigned int pinNumber, unsigned
int bitValue)' 控制相关端口' pinNumber'输出电平的高低实现控制LED灯的亮灭。
程序设计代码如下所示:(此次程序设计参考了创龙提供的官方源代码)
#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);
void GPIOBankPinMuxSet();
void GPIOBankPinInit();
void Delay(unsigned int n);
int main(void)
{
PSCInit();
GPIOBankPinMuxSet();
GPIOBankPinInit();
GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_LOW);
GPIOPinWrite(SOC_GPIO_0_REGS, 2, GPIO_PIN_LOW);
GPIOPinWrite(SOC_GPIO_0_REGS, 3, GPIO_PIN_LOW);
GPIOPinWrite(SOC_GPIO_0_REGS, 6, GPIO_PIN_LOW);
GPIOPinWrite(SOC_GPIO_0_REGS, 109, GPIO_PIN_HIGH);
GPIOPinWrite(SOC_GPIO_0_REGS, 110, GPIO_PIN_HIGH);
while(1)
{
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]
}
}
void PSCInit(void)
{
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
}
void GPIOBankPinMuxSet(void)
{
GPIOBank0Pin0PinMuxSetup();
GPIOBank0Pin1PinMuxSetup();
GPIOBank0Pin2PinMuxSetup();
GPIOBank0Pin5PinMuxSetup();
}
void GPIOBankPinInit(void)
{
// 核心板 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--);
}
复制代码
小结: 本次实验深入地了解了DSP GPIO的配置、初始化过程,在建立空工程后,要添加进相关的头文件和库文件,并且在属性设置中,Output format 应设置为eabi(ELF)格式,也可以在建立工程的时候就预先设置好。总体来说与其它类型单片机 基本配置过程类似,也真实地感受到C6748提供的IO端口之多,可以在此基础上进行很多深入的研发,作为大型项目系统的控制系统是能够胜任的。
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮