LM3S9B96的EPI总线的HB16模式配置
EPI工作模式:
- 同步动态随机访问存储器(SDRAM)模式:支持16位宽的SDRAM,最高达到50MHZ,复用地址与数据管脚。
- 主机总线(HB)模式:传统的8/16位微控制器总线接口,可兼容PIC,8051,AVR等单片机。可访问SRAM,NORFLSH其他的并行总线设备,非复用下寻址能力达到1MB,复用模式下寻址可以达到256MB
- 通用模式:可以通CPLD或者FPGA进行快速的数据交换,数据宽度可以达到32位,数据速率可以达到150MB/S.
- 并行GPIO模式:1到32位,必须经由FIFO输入输出,速度可控。
其中最常用的是:主机总线模式(Host bus)和SDRAM模式。
我项目中用到的是HB模式,并行读取16个管脚上的高低电平,并组成一个16进制的数值。下面是配置方法:
- 用SysCtlClockSet设置系统时钟
- 用SysCtlPeripheralEnable开GPIO口时钟
- 用GPIOPinConfigure将GPIO口配置成EPIO功能
- 用GPIOPinTypeEPI配置GPIO口为EPI模式
- 用EPIDividerSet设置EPI时钟
- 用位段方式HWREG(EPI_O_CFG)配置EPI为HB16模式
- 用位段方式HWREG(EPI_O_HB16CFG)配置读选通信号RDn(低电平有效), 最长等待时间(可以永远挂起), 写等待态(无等待态), 读等待态(1个等待态),字节选择配置(数据按照16位宽度读写), 主机并行总线的子模式(ADNOMUX子模式)
- 用位段方式HWREG(EPI_O_HB16CFG2)配置字访问模式(使能字访问模式), 双片选波特率(相同波特率), 片选配置(EPI0S30用作片选信号CSn)
- 用位段方式HWREG(EPI_O_ADDRMAP)配置片外外设空间大小64kB(低地址范围0x0000~0xFFFF),片外外设基地址(0xA000 0000)
- 至此,初始化完毕,就可以使用读写数据了
- 指向外设基地址0xA000 0000处的指针:g_pusEPIPER = (unsigned short *)0xA0000000;
- 向外设地址0处写ffff: *g_pusEPIPER = 0xfffc;设1个变量接收读取的数据:usDI16 = *g_pusEPIPER; // 从外设基地址0xA000 0000处读16位数据
鉴于有很多朋友问过我HB模式具体例子,我将HB16的例子公布如下:
//*****************************************************************************
// 头文件包含区
//*****************************************************************************
#include "inc/lm3s9b96.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_nvic.h"
#include "inc/hw_types.h"
#include "inc/hw_i2c.h"
#include "driverlib/i2c.h"
#include "driverlib/ethernet.h"
#include "driverlib/flash.h"
#include "driverlib/gpio.h"
#include "driverlib/timer.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "driverlib/systick.h"
#include "driverlib/uart.h"
#include "driverlib/watchdog.h"
#include "driverlib/epi.h"
#include "utils/locator.h"
#include "utils/lwiplib.h"
#include "utils/uartstdio.h"
#include "utils/ustdlib.h"
#include "grlib/grlib.h"
#include "httpserver_raw/httpd.h"
#include "drivers/kitronix320x240x16_ssd2119_8bit.h"
#include "drivers/set_pinout.h"
//*****************************************************************************
// 数据类型定义区
//*****************************************************************************
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef enum {FALSE = 0, TRUE = !FALSE} bool;
//*****************************************************************************
// 宏定义区
//*****************************************************************************
/* Defines for setting up the system clock -----------------------------------*/
#define SYSTICKHZ 100
#define SYSTICKMS (1000 / SYSTICKHZ)
#define SYSTICKUS (1000000 / SYSTICKHZ)
#define SYSTICKNS (1000000000 / SYSTICKHZ)
/* 在lm3s9b96.h中定义 --------------------------------------------------------*/
#define EPI_O_CFG 0x400D0000
#define EPI_O_HB16CFG 0x400D0010
#define EPI_O_HB16CFG2 0x400D0014
#define EPI_O_ADDRMAP 0x400D001c
#define EPI_O_BAUD 0x400D0004
#define EPI_PORTC_PINS (GPIO_PIN_7 | GPIO_PIN_6 | GPIO_PIN_5 | GPIO_PIN_4)
#define EPI_PORTD_PINS (GPIO_PIN_3 | GPIO_PIN_2)
#define EPI_PORTE_PINS (GPIO_PIN_1 | GPIO_PIN_0)
#define EPI_PORTF_PINS (GPIO_PIN_5 | GPIO_PIN_4)
#define EPI_PORTG_PINS (GPIO_PIN_7 | GPIO_PIN_1 | GPIO_PIN_0)
#define EPI_PORTH_PINS (GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 | GPIO_PIN_2 | \
GPIO_PIN_1 | GPIO_PIN_0)
#define EPI_PORTJ_PINS (GPIO_PIN_6 | GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 | \
GPIO_PIN_2 | GPIO_PIN_1 | GPIO_PIN_0)
//*****************************************************************************
//
LM3S9B96EPI总线HB16模式配 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)