DSPF28335:GPIO以及外部中断配置[DSP GPIO EXTI]


  • 仅针对TMS320x2833x, TMS320x2823x两款系列芯片,其他可能略有差异。

一、GPIO

1.1 GPIO-Pin划分

分组ABC
Pin Num0-3132-6364-87

1.2 GPIO0-GPIO27时钟树

时钟树
XRS为芯片复位引脚,低电平有效

1.3 寄存器介绍

1. 配置相关寄存器

GPxPUD

上拉失能寄存器

Value作用
0上拉
1不上拉

GPAPUD

GPxDIR

IO驱动方向

Value作用
0输入(默认)
1输出

GPADIR

GPxMUX1/2

GPIO功能及复用选择

Value作用
00普通IO功能
01、10、11对应代表不同复用功能

不同引脚的复用功能不一样,见下图:
GPIOA MUX

GPxQSEL1/2

输入质量选择(输入采样窗口设置)

Value作用
00与系统时钟同步(SYSCLKOUT)
01三个采样窗口(3 sample)
10六个采样窗口(6 sample)
11异步

同步与异步选择:
同步:与系统时钟同步,系统时钟频率为150MHz就是输出150MHz。
异步:即所需时钟不与与系统时钟相同,将系统时钟经过分频得到对应的外设时钟,如IIC、SPI、ADC等。

GPAQSEL1

GPxCTRL

输入采样周期设置;当GPxQSEL1/2配置了3 samples或6 samples,通过该寄存器设置采样周期

Value作用
0x00 - 0xFF采样周期 = (Value × 2) × T_SYSCLKOUT

GPACTRL

GPIOXINT1SEL

选择外部中断引脚源;比如:GPIO12挂载到XINT1,赋值为12

GPIOxXINTn
GPIO0 - GPIO31可挂载到XINT1、XINT2
GPIO32 - GPIO63可挂载到XINT3\4\5\6\7

GPIOXINTnSEL

低功耗模式配置

GPIOLPMSEL:低功耗模式唤醒选择
LPMCR0:低功耗模式控制寄存器

二、外部中断

时钟树

外部中断时钟树

中断向量表

外部中断:XINT1-7在中断向量表的分布:

INTy(Group)INTx外部中断源
14XINT1
15XINT2
121XINT3
122XINT4
123XINT5
124XINT6
125XINT7

中断向量表

寄存器
XINTnCR

外部中断控制寄存器
XINTnCR

XINT1CTR (暂时用不到)

外部中断计数寄存器,只有XINT1和XINT2有,16位递增计数器,以SYSCLKOUT速率计时。当检测到有效中断边缘时,计数器值重置为0x0000,然后继续计数,直到检测到下一个有效中断边缘。

XINT1CTR

三、GPIO工作模式配置

编程时用到的寄存器变量名:

寄存器名作用
GpioCtrlRegsgpio控制寄存器(输入、输出、上拉等等)
GpioDataRegsgpio数据寄存器(输出高电平、读取io电平等等)
GpioIntRegsgpio中断寄存器(选择中断源)

3.1 GPIO配置输出模式

	SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; //开启GPIO使能

	GpioCtrlRegs.GPCMUX1.bit.GPIO68 = 0;     //通用GPIO功能
	GpioCtrlRegs.GPCDIR.bit.GPIO68 = 1;      //输出
	GpioCtrlRegs.GPCPUD.bit.GPIO68 = 0;      //上拉
	EDIS; //开启写保护
	GpioDataRegs.GPCSET.bit.GPIO68 = 1;      //输出高电平

3.2 GPIO配置输入模式

	// GPIO0 and GPIO1 are inputs
	EALLOW;
	SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;    //开启GPIO使能
	GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;         // GPIO
	GpioCtrlRegs.GPADIR.bit.GPIO0 = 0;          // input
	GpioCtrlRegs.GPAQSEL1.bit.GPIO0 = 0;        // 与系统时钟同步
	EDIS;

3.3 GPIO外部中断模式

static void Exti_PIE_Init(void)
{
	EALLOW;
	PieVectTable.XINT1 = &xint1_isr;            //映射函数入口
	EDIS;

	//PieCtrlRegs.PIECTRL.bit.ENPIE = 1;        // 使能PIE
	PieCtrlRegs.PIEIER1.bit.INTx4 = 1;          // 使能INTx4

	EALLOW;
	GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 0;   // 选择中断源:GPIO0
	EDIS;

	XIntruptRegs.XINT1CR.bit.POLARITY = 0;      // 下降沿触发
	XIntruptRegs.XINT1CR.bit.ENABLE = 1;        // 使能XINT1

	IER |= M_INT1;                              // 使能CPU中断
	EINT;                                       // 使能全局中断
}

static void Exti_Gpio_Init(void)
{
	// GPIO0 and GPIO1 are inputs
	EALLOW;
	SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;    //开启GPIO使能
	GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;         // GPIO
	GpioCtrlRegs.GPADIR.bit.GPIO0 = 0;          // input
	GpioCtrlRegs.GPAQSEL1.bit.GPIO0 = 0;        // 与系统时钟同步(一般默认)
	EDIS;

}

void Exti_Init(void)
{
	Exti_PIE_Init();
	Exti_Gpio_Init();
}

__interrupt void xint1_isr(void)
{
	// Acknowledge this interrupt to get more from group 1
	PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //等效:PieCtrlRegs.PIEACK.bit.ACK1 = 1;
	// 中断向量表第x组  PIEACK.bit.ACKx / PIEACK.all = PIEACK_GROUPx
	// 触发中断后,查询电平引脚作进一步动作
}

总结

DSP F28335芯片GPIO以及外部中断配置的学习记录,目前均对GPIOA组寄存器进行介绍,并给出相应配置代码。(个人学习记录分享)

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值