GPIO 端口设置
设置PORTB19引脚为数字输出,输出为低电平.
方法一: 直接地址方式
1.1 volatile uint_32 *portB_ptr= (uint_32 *) 0x4004A000u; //找到PORTB端口的引脚控制寄存器的基地址,也是PORTB引脚0的控制寄存器的地址
1.2 volatile uint_32 *portB_PCR_19=portB_ptr+19; //通过PORTB端口的引脚控制寄存器的基地址+偏移量,找到PORTB 引脚19的地址
1.3 *portB_PCR_19=0x00000100;//通过设置PORTB端口引脚19的控制寄存器的MUX(8~10位)为001来设置此引脚为GPIO引脚
1.4 volatile uint_32 *gpioB_ptr=(uint_32 *) 0x400FF040u;//找到PORTB端口(作为GPIO端口)的基地址,也是此端口PDOR寄存器的地址
1.5 volatile uint_32 * gpioB_PDDR=gpioB_ptr+5;//通过PORTB端口(作为GPIO端口)的基地址+偏移量,找到GPIOB的PDDR的地址
1.6 volatile uint_32 * gpioB_PDOR=gpioB_ptr+0;//通过PORTB端口(作为GPIO端口)的基地址+偏移量,找到GPIOB的PDOR的地址
1.7 *gpioB_PDDR|=(1<<19);//定义PORTB 引脚19为数字输出
1.8 *gpioB_PDOR&=~(1<<19);//定义PORTB 引脚19为输出低电平
方法二: 通过建立GPIO驱动构件
2.1 设计GPIO.h头文件
#ifndef GPIO_H //防止重复定义(gpio_H 开头)
#define GPIO_H
#include "common.h" //包含公共要素头文件
// 端口号地址偏移量宏定义
#define PORTA 0
#define PORTB 1
#define PORTC 2
#define PORTD 3
#define PORTE 4
//引脚方向宏定义
#define GPIO_IN 0
#define GPIO_OUTPUT 1
void gpio_init(uint_8 port, uint_8 pin, uint_8 dir, uint_8 state);
void gpio_set(uint_8 port, uint_8 pin, uint_8 state);
uint_8 gpio_get(uint_8 port, uint_8 pin);
void gpio_reverse(uint_8 port, uint_8 pin);
void gpio_pull(uint_8 port,uint_8 pin, uint_8 pullselect);
#endif //防止重复定义(gpio_H 结尾)
2.2 设计GPIO.c源文件
#include "gpio.h" //包含本构件头文件
//各端口基地址放入常数数据组PORT_ARR[0]~PORT_ARR[4]中
const PORT_MemMapPtr PORT_ARR[]={PORTA_BASE_PTR,PORTB_BASE_PTR,
PORTC_BASE_PTR,PORTD_BASE_PTR,PORTE_BASE_PTR};
//GPIO口基地址放入常数数据组GPIO_ARR[0]~GPIO_ARR[4]中
const GPIO_MemMapPtr GPIO_ARR[]={PTA_BASE_PTR,PTB_BASE_PTR,
PTC_BASE_PT