📄 gpio-bus.c
字号:
#include "GPIO-Bus.h"
#include "LM3S-JTAG.h"
#include <hw_types.h>
#include <hw_memmap.h>
#include <hw_gpio.h>
#include <sysctl.h>
#include <gpio.h>
#define SysCtlPeriEnable SysCtlPeripheralEnable
#define GPIOPinTypeIn GPIOPinTypeGPIOInput
#define GPIOPinTypeOut GPIOPinTypeGPIOOutput
// 总线初始化
// 地址总线:PA0~PA7=A0~A7,PB0~PB7=A8~A15
// 数据总线:PF0~PF7=D0~D7
// 控制总线:PC4=/WR,PC5=/RD
void busInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOA); // 使能GPIOA端口
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOB); // 使能GPIOB端口
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOC); // 使能GPIOC端口
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOF); // 使能GPIOF端口
GPIOPinTypeOut(GPIO_PORTA_BASE, 0xFF); // 设置PA0~PA7为输出
GPIOPinTypeOut(GPIO_PORTB_BASE, 0x7F); // 设置PB0~PB6为输出
GPIOPinTypeOut(GPIO_PORTC_BASE, GPIO_PIN_4 | GPIO_PIN_5); // 设置PC4、PC5为输出
GPIOPinTypeIn(GPIO_PORTF_BASE, 0xFF); // 设置PF0~PF7为输入
jtagPinToGPIO(GPIO_PORTB_BASE, GPIO_PIN_7); // 允许PB7配置为GPIO功能
GPIOPinTypeOut(GPIO_PORTB_BASE, GPIO_PIN_7); // 设置PB7为输出
GPIOPinWrite(GPIO_PORTA_BASE, 0xFF, 0xFF); // A0~A7=0xFF
GPIOPinWrite(GPIO_PORTB_BASE, 0xFF, 0xFF); // B0~B7=0xFF
GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_4, 0xFF); // /WR=1
GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5, 0xFF); // /RD=1
}
// 从总线读1个字节
// 操作时序:输出地址,/RD=0,读数据,/RD=1
char busRead(unsigned short usAddr)
{
char cData;
HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (0xFF << 2))) = (char)usAddr;
HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (0xFF << 2))) = usAddr >> 8;
HWREG(GPIO_PORTC_BASE + (GPIO_O_DATA + (GPIO_PIN_5 << 2))) = 0x00;
cData = HWREG(GPIO_PORTF_BASE + (GPIO_O_DATA + (0xFF << 2)));
HWREG(GPIO_PORTC_BASE + (GPIO_O_DATA + (GPIO_PIN_5 << 2))) = 0xFF;
return(cData);
}
// 写1个字节到总线
// 操作时序:输出地址,/WR=0,数据总线切换为输出,写数据,/WR=1,数据总线切换为输入
void busWrite(unsigned short usAddr, char cData)
{
HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (0xFF << 2))) = (char)usAddr;
HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (0xFF << 2))) = usAddr >> 8;
HWREG(GPIO_PORTC_BASE + (GPIO_O_DATA + (GPIO_PIN_4 << 2))) = 0x00;
HWREG(GPIO_PORTF_BASE + GPIO_O_DIR) |= 0xFF;
HWREG(GPIO_PORTF_BASE + (GPIO_O_DATA + (0xFF << 2))) = cData;
HWREG(GPIO_PORTC_BASE + (GPIO_O_DATA + (GPIO_PIN_4 << 2))) = 0xFF;
HWREG(GPIO_PORTF_BASE + GPIO_O_DIR) &= ~0xFF;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -