从这一个开始才算真正迈入6748的门槛,从TMS320C6748最简单的外设GPIO开始。
1、GPIO框图:
6748一共有144个GPIO管脚,分成了9个Bank,每个Bank有16个管脚:
1~144对应:GP0[0]~GP8[15],
对6748的GPIO操作其实和其他MCU的操作是个流程,不同的是6748要复杂很多,STM32有库函数,直接调用就可以,
但是6748的库函数不完整,有的需要对寄存器进行操作。
2、初始化GPIO的步骤
创龙的例程就不再赘述了,不知道是不是自己没找到源程序,下面的几个管脚复用的函数我都没有找到,不知道是怎么实现的,所以想要移植其他GPIO很困难。
/****************************************************************************/
/* */
/* GPIO 管脚复用配置 */
/* */
/****************************************************************************/
void GPIOBankPinMuxSet(void)
{
// 配置相应的 GPIO 口功能为普通输入输出口
// 底板 LED
GPIOBank0Pin0PinMuxSetup();
GPIOBank0Pin1PinMuxSetup();
GPIOBank0Pin2PinMuxSetup();
GPIOBank0Pin5PinMuxSetup();
}
自己通过查阅技术手册,对GPIO的寄存器GPIO_OUT_DATA进行操作,
而不是调用GPIOPinWrite()函数对GPIO_SET_DATA寄存器进行操作,实现流水灯的效果。
第一步:管脚复用为输入输出口,在这里吐槽一下库函数,官方的库函数竟然没有管脚复用的函数,只能自己操作寄存器,6748有20个管脚复用控制寄存器PINMUX
把GP0[0]~GP0[7]设置为输出管脚:对应PINMUX1_31~0,每4bit控制一个管脚
技术手册:
对该寄存器的操作采用“读-屏蔽-写”的操作避免影响到其他位的配置。
//复用管脚1~8,GP0[0]~GP0[7],为输入输出管脚
PINMUX_1_VAL=HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)); /* 读取PINMUX1(复用寄存器)寄存器的值 */
PINMUX_1_VAL=(PINMUX_1_VAL&0x00000000)|0x88888888;
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1))=PINMUX_1_VAL;/* 将设置后的值写回PINMUX1寄存器 */
其中HWREG是对寄存器进行操作:
#define HWREG(x) \
(*((volatile unsigned int *)(x)))
SOC_SYSCFG_0_REGS定义在:soc_6748.h头文件中,代表系统控制寄存器的首地址,加上SYSCFG0_PINMUX(1)对应目标地址,这样的操作后面还有:
/** \brief Base address of DEV memory mapped registers */
#define SOC_SYSCFG_0_REGS (0x01C14000)
第二步:设置管脚为输出管脚,可以直接调用库函数,注意的是pinNumber是管脚号+1,其他不赘述:
GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_OUTPUT); // D10 GPIO0[7]
第三步:操作GPIO_OUT_DATA寄存器:
这里我不使用库函数
GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_HIGH);
而是操作寄存器:
HWREG(SOC_GPIO_0_REGS + GPIO_OUT_DATA(0))=0x01;
这样有个好处,在并行读GPIO口的时候有优势,同理可以操作:HWREG(SOC_GPIO_0_REGS + GPIO_INPUT_DATA(0))
其中SOC_GPIO_0_REGS 是GPIO的基地址
/** \brief Base address of GPIO memory mapped registers */
#define SOC_GPIO_0_REGS (0x01E26000)
GPIO_OUT_DATA是偏移地址,其中n从0~5
#define GPIO_OUT_DATA(n) (0x14 + (0x28 * n))
第四步:在CCS中调试
管脚复用正确:
方向正确:
输出结果正确:
感谢作者的参考文献:https://blog.csdn.net/litao31415/article/details/22645181
|