⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gpio-bus.c

📁 LM3S系列ARM用GPIO模拟并行总线扩展32KB SRAM PF0~PF7 D0~D7(数据总线) PA0~PA7 A0~A7(地址总线低8位) PB0~PB
💻 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 + -