DSP28335的GPIO的引脚配置

F28335有三种32位的I/O口,依次PORTA(GPIO0-GPIO31), PORTB(GPIO32-GPIO63), PORTC(GPIO64-GPIO87),这些口都可以配置为普通的数字IO口同样也能被配置为外部接口。
这样涉及到了IO的寄存器,IO口共有三类寄存器:
控制寄存器、数据寄存器和中断控制寄存器。
1、 GPIO可以配置为数字I/O或外设I/O口,GPxMUX1(2):‘0’为数字I/O,‘1’为外设I/O口;
2: GPIO可以配置为内部电阻上拉功能,GPxPUD:‘0’为上拉,‘1’为禁止上拉
3: GPIO具有数字滤波功能,GPxQSEL1(2):量化输入寄存器,可以确定是3周期采样
还是6周期采样或者不用采样;
GPIO可以配置为内部电阻上拉功能,GPxPUD:‘0’为上拉,‘1’为禁止上拉,

4、 输入输出可配置,GPxDIR是控制每个引脚的输入或是输出,‘0’是输入,‘1’是输出;
当GPIO配置为数字I/O时注意:
1)28335引脚作为输出时,虽然可以通过设置GPADAT或GPBDAT改变输出端口的高低电平,但是单独写某一位时可能会使其它引脚产生误操作。为了避免这种现象的产生,改变输出引脚的高低电平时,应该使用GPIOxSET(置位),GPIOxCLEAR(清零),GPIOxTOGGLE(反向,可以代替去翻操作)寄存器载入输出锁存寄存,GPIOxDIR配置方向,1为输出,0为输入.
2)当使用GPADAT的时候,一般是在初始化中,在函数中使用需要添加延时,否则可能达不到预定的输出状态。使用GPIOxSET(置位),GPIOxCLEAR(清零),GPIOxTOGGLE(反向)电平会立即变化,无需添加延时。
GPIOxSET, GPIOxCLEAR, GPIOxTOGGLE仅仅等于1时才有效,等于0无效

以下例程是针对野火DSP28335开发板的程序,已经验证。
#include “DSP2833x_Device.h” // DSP2833x Headerfile Include File
#include “DSP2833x_Examples.h” // DSP2833x Examples Include File
void Gpio_select(void);
void delay_loop();
int main(void) {
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
InitFlash();

InitSysCtrl();

Gpio_select();//GPIO 初始化

// 步骤 3. 清除所有中断初始化中断向量表:
// 禁止CPU全局中断
DINT;
// 初始化PIE控制寄存器到他们的默认状态.
// 这个默认状态就是禁止PIE中断及清除所有PIE中断标志
// 这个函数放在DSP2833x_PieCtrl.c源文件里
InitPieCtrl();
// 禁止CPU中断和清除所有CPU中断标志
IER = 0x0000;
IFR = 0x0000;

//初始化PIE中断向量表,并使其指向中断服务子程序(ISR)
// 这些中断服务子程序被放在了DSP280x_DefaultIsr.c源文件中
// 这个函数放在了DSP2833x_PieVect.c源文件里面.
InitPieVectTable();

GpioDataRegs.GPBDAT.all    =0x00000000;//第28、29位为低电平LED灯亮
GpioDataRegs.GPCDAT.all    =0x00000000;//第0 -4位为低电平LED灯亮
delay_loop();
delay_loop();

// for(;?

while(1)
	{
	   delay_loop();  //延时
       GpioDataRegs.GPBTOGGLE.all =0x30000000;  //电平翻转
       GpioDataRegs.GPCTOGGLE.all =0x0000001F;  //电平翻转
	}

/*
EALLOW;
// 把LED灯熄灭
GpioDataRegs.GPBSET.bit.GPIO60 =1;
GpioDataRegs.GPBSET.bit.GPIO61 =1;
GpioDataRegs.GPCSET.bit.GPIO64 =1;
GpioDataRegs.GPCSET.bit.GPIO65 =1;
GpioDataRegs.GPCSET.bit.GPIO66 =1;
GpioDataRegs.GPCSET.bit.GPIO67 =1;
GpioDataRegs.GPCSET.bit.GPIO68 =1;
EDIS;

   delay_loop();

/
// GpioDataRegs.GPBTOGGLE.all =0x30000000;
// GpioDataRegs.GPCTOGGLE.all =0x0000001F;
/
EALLOW;
// 打开LED灯
GpioDataRegs.GPBCLEAR.bit.GPIO60 =1;
GpioDataRegs.GPBCLEAR.bit.GPIO61 =1;
GpioDataRegs.GPCCLEAR.bit.GPIO64 =1;
GpioDataRegs.GPCCLEAR.bit.GPIO65 =1;
GpioDataRegs.GPCCLEAR.bit.GPIO66 =1;
GpioDataRegs.GPCCLEAR.bit.GPIO67 =1;
GpioDataRegs.GPCCLEAR.bit.GPIO68 =1;
EDIS;
*/

return 0;

}

void delay_loop()
{
Uint32 i;
Uint32 j;
for(i=0;i<32;i++)
for (j = 0; j < 100000; j++) {}
}

void Gpio_select(void)
{

EALLOW;
GpioCtrlRegs.GPAMUX1.all = 0x00000000;  // All GPIO
GpioCtrlRegs.GPAMUX2.all = 0x00000000;  // All GPIO
GpioCtrlRegs.GPBMUX1.all = 0x00000000;  // All GPIO
GpioCtrlRegs.GPBMUX2.all = 0x00000000;  // All GPIO
GpioCtrlRegs.GPCMUX1.all = 0x00000000;  // All GPIO
GpioCtrlRegs.GPCMUX2.all = 0x00000000;  // All GPIO


GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF;   // All outputs
GpioCtrlRegs.GPBDIR.all = 0xFFFFFFFF;   // All outputs
GpioCtrlRegs.GPCDIR.all = 0xFFFFFFFF;   // All outputs

EDIS;

}

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PIO(General-Purpose Input/Output)——通用输入/输出口;       DSP28335 GPIO模块分为三类IO口:PORTA(0-31),PORTB(32-63),PORTC(64-87) 对GPIO模块的设置主要通过三类寄存器来完成,分别是:控制寄存器、数据寄存器、中断寄存器。 1、控制寄存器   GPxCTRL;    // GPIO x Control Register (GPIO0 to 31)               //设置采样窗周期T=2*GPXCTRL*Tsysclk;   GPxQSEL1;   // GPIO x Qualifier Select 1 Register (GPIO0 to 15)(32-47)               GPxQSEL2;   // GPIO x Qualifier Select 2 Register (GPIO16 to 31)(48-63)               //每两位控制一个,确定是3周期采样还是6周期采样或者不用采样   GPxMUX1;    // GPIO x Mux 1 Register (GPIO0 to 15)(32-47)(64-79)   GPxMUX2;    // GPIO x Mux 2 Register (GPIO16 to 31)(48-63)(80-95)               //配置各个的功能,0:I/O功能,1:外设功能。   GPxDIR;     // GPIO x Direction Register (GPIO0 to 31)(32-63)(64-95)               //配置每个是输入还是输出,0:数字量输入;1:数字量输出。   GPxPUD;     // GPIO x Pull Up Disable Register (GPIO0 to 31)(32-63)(64-95)               //使能或禁止内部上拉 0:开启上拉,1:禁止上拉 2、数据寄存器   GPxDAT;     // GPIO Data Register (GPIO0 to 31)(32-63)(64-95)   GPxSET;     // GPIO Data Set Register (GPIO0 to 31)(32-63)(64-95)——置位   GPxCLEAR;   // GPIO Data Clear Register (GPIO0 to 31)(32-63)(64-95)   GPxTOGGLE;  // GPIO Data Toggle Register (GPIO0 to 31)(32-63)(64-95)—反转

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值