DSP TMS320C6748—GPIO配置


转自:https://blog.csdn.net/xiaoluoshan/article/details/54412085

1 General-Purpose Input/Output(GPIO)通用输入输出配置介绍

  本节我们主要介绍GPIO的输入输出控制功能,中断部分下次结合中断向量表一起说明。

1.1 GPIO简介

  TMS320C6748共有8 Banks,16 GPIOs per Bank,几乎所有引脚都可以配置成为GPIO端口。
在这里插入图片描述
在这里插入图片描述
  对于GPIO,我们只需关注这几个寄存器:

  • DIR:方向控制寄存器,控制GPIO管脚是输入还是输出,其中,对应位置0表示该管脚为输出管脚;对应位置1表示该管脚为输入管脚。
  • OUT_DATA:输出数据寄存器,控制管脚输出电平,其中,对应位置0表示该管脚输出为低电平;对应位置1表示该管脚输出为高电平。
  • SET_DATA:设置数据寄存器,对应位置1表示该管脚输出为高电平,需要注意的是该寄存器写0无效。
  • CLEAR_DATA:清除数据寄存器,对应位置1表示该管脚输出为低电平,需要注意的是该寄存器写0无效。
  • IN_DATA:输入数据寄存器,注意该寄存器是只读寄存器,返回对应位的输入电平。

1.2 GPIO配置说明

创龙开发板中:GPIO_LED工程
a. 配置PSC模块,使能GPIO功能。

/****************************************************************************/
/*                                                                          */
/*              PSC 初始化                                                  */
/*                                                                          */
/****************************************************************************/
void PSCInit(void)
{
	// 使能 GPIO 模块
	// 对相应外设模块的使能也可以在 BootLoader 中完成
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
}

b. 配置PINMUX模块,选择需要使用的管脚作为GPIO引脚。

/****************************************************************************/
/*                                                                          */
/*              GPIO 管脚复用配置                                           */
/*                                                                          */
/****************************************************************************/
void GPIOBankPinMuxSet(void)
{
	// 配置相应的 GPIO 口功能为普通输入输出口

	// 核心板 LED
	GPIOBank6Pin12PinMuxSetup();
	GPIOBank6Pin13PinMuxSetup();

	// 底板 LED
	GPIOBank0Pin1PinMuxSetup();
	GPIOBank0Pin2PinMuxSetup();
	GPIOBank0Pin5PinMuxSetup();
}

具体可以参看这篇帖子。http://bbs.elecfans.com/forum.php?mod=viewthread&tid=516939&page=1&extra=#pid3851865

c. 配置DIR方向控制寄存器。

/****************************************************************************/
/*                                                                          */
/*              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, 110, GPIO_DIR_OUTPUT);  // 核心板FD1  GPIO6[13]
	GPIODirModeSet(SOC_GPIO_0_REGS, 109, GPIO_DIR_OUTPUT);  // 核心板FD2  GPIO6[12]

    // 底板 LED
    GPIODirModeSet(SOC_GPIO_0_REGS, 6, GPIO_DIR_OUTPUT);    // 底板GD1  GPIO0[5]
    GPIODirModeSet(SOC_GPIO_0_REGS, 2, GPIO_DIR_OUTPUT);    // 底板GD2  GPIO0[1]
    GPIODirModeSet(SOC_GPIO_0_REGS, 3, GPIO_DIR_OUTPUT);    // 底板GD3  GPIO0[2]
}

d. 如果配置GPIO为输入引脚,那么在有信号输入后可以读取IN_DATA寄存器以获得输入电平;如果配置GPIO为输出引脚,可以配置OUT_DATA或SET_DATA或CLEAR_DATA寄存器输出高/低电平。

/****************************************************************************/
/*                                                                          */
/*              主函数                                                      */
/*                                                                          */
/****************************************************************************/
int main(void)
{
	// 外设使能配置
	PSCInit();

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

	// GPIO 管脚初始化
	GPIOBankPinInit();

	// 主循环
	for(;;)
	{
		GPIOPinWrite(SOC_GPIO_0_REGS,   6, GPIO_PIN_HIGH);    // 底板GD1   GPIO0[5]
		GPIOPinWrite(SOC_GPIO_0_REGS,   2, GPIO_PIN_HIGH);    // 底板GD2   GPIO0[1]
		GPIOPinWrite(SOC_GPIO_0_REGS,   3, GPIO_PIN_HIGH);    // 底板GD3   GPIO0[2]
		GPIOPinWrite(SOC_GPIO_0_REGS, 110, GPIO_PIN_HIGH);    // 核心板FD1  GPIO6[13]
		GPIOPinWrite(SOC_GPIO_0_REGS, 109, GPIO_PIN_HIGH);    // 核心板FD2  GPIO6[12]
		Delay(0x00FFFFFA);
		GPIOPinWrite(SOC_GPIO_0_REGS,   6, GPIO_PIN_LOW);    // 底板GD1   GPIO0[5]
		GPIOPinWrite(SOC_GPIO_0_REGS,   2, GPIO_PIN_LOW);    // 底板GD2   GPIO0[1]
		GPIOPinWrite(SOC_GPIO_0_REGS,   3, GPIO_PIN_LOW);    // 底板GD3   GPIO0[2]
		GPIOPinWrite(SOC_GPIO_0_REGS, 110, GPIO_PIN_LOW);    // 核心板FD1  GPIO6[13]
		GPIOPinWrite(SOC_GPIO_0_REGS, 109, GPIO_PIN_LOW);    // 核心板FD2  GPIO6[12]
		Delay(0x00FFFFFA);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点灯小能手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值