DSP28335_Control suit(2)_Example_2833xGpioSetup

来源:互联网 发布:微商城源码 编辑:程序博客网 时间:2024/05/01 20:16

原理图画的并不是很好,所以看不出对应的引脚。
这里写图片描述
结合实际测试,所谓的LED: D3 为 GPIO1,D4为GPIO
首先说一下88个复用IO口
由于复用IO口是88个,GPIO0-GPIO87
所以我们需要对其进行整理:
A:(GPIO 0 ~GPIO 31) GPIOA
B:(GPIO32~GPIO 63) GPIOB
B:(GPIO32~GPIO 63) GPIOC
这里参照官方例子程序,最终成为了这四行代码非常关键:

// Enable an GPIO output on GPIO1, set it high  D4GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;   // Enable pullup on GPIO6GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;  // GPIO1 = GPIO1GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;   // GPIO1 = outputGpioDataRegs.GPASET.bit.GPIO1 = 1;   // Load output latch

这时候我们就会发现一个奇怪的语句:

GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;   // Enable pullup on GPIO6

Enable pullup 表示的含义是上拉,及内部上拉
我们测试一下如果删掉这条语句在编译的过程中会出现的情况:
发现内部上拉并不影响其功能。
经过测试上述的IO口测试得到一些结论:
1. GPIO控制寄存器在案例中并没有什么太大用处。
这里需要了解一个上拉,内部上拉。

GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;   // Enable pullup on GPIO6

2.GPxMUX寄存器(多路复用寄存器)
例子:

GpioCtrlRegs.GPAMUX1.bit.GPIO48 = 0;  //设置为数字I/O口模式GpioCtrlRegs.GPAMUX1.bit.GPIO2= 1;  //设置为PWM模式GpioCtrlRegs.GPAMUX1.bit.GPIO18= 3;  //设置为CANRXA

3.GPxDIR寄存器(方向寄存器)

GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;   // GPIO1 = output 设置为输出GpioCtrlRegs.GPADIR.bit.GPIO1 = 0;   // GPIO1 = input 设置为输入

GPIO数据类寄存器
1. GpxDAT寄存器(数据寄存器)
2. GPxSET寄存器(置位寄存器),若引脚设置为输出,向该寄存器相应位写1会驱动对应的引脚为高电平,写0无影响。
3. GPxCLEAR寄存器(置位寄存器),若引脚设置为输出,向该寄存器相应位写1会驱动对应的引脚为低电平,写0无影响。
4. GPxTOGGLE寄存器(状态翻转寄存器)
若引脚为数字输出,向该寄存器相应位写1会对驱动引脚由低电平变为高电平,或由高电平变为低电平,写0无影响。

原创粉丝点击