ARM 应用系统设计 第六章 部件工作原理和编程示例佘黎煌 东北大学信息科学与工程学院 电子信息工程研究所
第六章 部件工作原理和编程示例
GPIO编程示例 EBI编程 外部中断nIRQ编程 UART编程示例 TIMER编程示例
GPIO
W90P710 处理器的GPIO 模块(General Purpose Input Output) 提供了71 个可编程的通用输入/输出引脚,每个输入/输出引脚可 以通过软件编程设置为输入模式、输出模式或特殊功能模式。
GPIO
端口0: 端口1: 端口2: 端口3: 端口4: 端口5: 端口6:
5 引脚输入/输出端口 10 引脚输入/输出端口 10 引脚输入/输出端口 8 引脚输入/输出端口 11 引脚输入/输出端口 15 引脚输入/输出端口 12 引脚输入/输出端口
GPIO的控制
利用GPIO 口控制连接在GPIO 引脚上的LED 灯 的亮灭 1. 通过AXD Debugger 的命令行调试功能, 直接通过JTAG 接口修改W90P710 处理器内部 端口寄存器的值. 2. C 语言源程序,实现通过GPIO 口控制 LED12、LED13 按照设定的时间间隔闪烁。
GPIO的控制
GPIO复选控制寄存器
GPIO上拉电阻和方向配置
GPIO输出控制寄存器
AXD Debugger控制
AXD Debugger控制
AXD Debugger控制
通过AXD控制设定GPIO5 和GPIO6 引脚为输出模式,并使能 内部上拉电阻 Debug> setmem 0xFFF83054 0x30003,32 使GPIO5 和GPIO6 引脚输出电平为高。此时, LED12、LED13 应熄灭。 Debug> Setmem 0xFFF83058 0x3,32 使GPIO5 和GPIO6 引脚输出电平为低。此时, LED12、LED13 应点亮。 Debug> Setmem 0xFFF83058 0x0,32
C语言-寄存器访问
#define GPIO_BA 0xFFF83000 /* GPIO Control */ #define REG_GPIO_CFG5 (GPIO_BA+0x0050) /* GPIO port5 configuration Register */ #define REG_GPIO_DIR5 (GPIO_BA+0x0054) /* GPIO port5 direction control Register */ #define REG_GPIO_DATAOUT5 (GPIO_BA+0x0058) /* GPIO port5 data out Register */ #define REG_GPIO_DATAIN5 (GPIO_BA+0x005c) /* GPIO port5 data input Register */ #define outpw(port,value) (*((UINT32 volatile *) (port))=value) #define inpw(port) (*((UINT32 volatile *) (port))) outpw(REG_GPIO_CFG5,0x0); // 设置PORT5_0, PORT5_1 为GPIO5,GPIO6 方式
文件组织
GPIO.C#include "wblib.h“ void GpioInit(){ outpw(REG_GPIO_CFG5,0x0); // 设置PORT5_0, PORT5_1 为GPIO5,GPIO6 方式 outpw(REG_GPIO_DIR5,0x30003); // 设置GPIO5,GPIO6 引脚内部上拉,// 并将这两个引脚设为输出模式 } void SetGpio(INT16 value){ outpw(REG_GPIO_DATAOUT5,value); }
Main.c#include <stdio.h> #include "wblib.h" #include "irq_handler.h" #include "main.h" int main (void){ INT16 value = 0x3; GpioInit(); while(1){ value = (value&0x3)^0x3; SetGpio(value); Delay(1000000); } return 0; }
void Delay(INT32 t) { do { t--; }while(t); }
通过AXD调试软件做地址重映射建立一个文本文件setmap.txt, setmem 0xfff01000
0x000530C1,32 setmem 0xfff01004 0x10040084,32 setmem 0xfff01008 0x000010E4,32 setmem 0xfff0100c 0x00000000,32 setmem 0xfff01010 0x0000014B,32 setmem 0xfff01014 0x0000014B,32
;EBICON ;ROMCON ;SDCONF0 ;SDCONF1 ;SDTIME0 ;SDTIME1
将SDRAM的基地址配置为0x0,FLASH的基地址配置为 0x8000000,AXD调试在SDRAM中进行
Debug> obey c:\setmap.txt
第六章 部件工作原理和编程示例
GPIO编程示例 EBI编程 外部中断nIRQ编程 UART编程示例 TIMER编程示例