收藏 分享(赏)

2010-第8章--嵌入式io端口.ppt

上传人:天天快乐 文档编号:1103311 上传时间:2018-06-11 格式:PPT 页数:31 大小:322.50KB
下载 相关 举报
2010-第8章--嵌入式io端口.ppt_第1页
第1页 / 共31页
2010-第8章--嵌入式io端口.ppt_第2页
第2页 / 共31页
2010-第8章--嵌入式io端口.ppt_第3页
第3页 / 共31页
2010-第8章--嵌入式io端口.ppt_第4页
第4页 / 共31页
2010-第8章--嵌入式io端口.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、1,第8章 I/O端口,李建义,2,8.1 通用 I/O端口,通用I/O口的配置通用I/O口的编程,3,8.1.1 S3C2440的I/O端口,130个多功能端口,分为9组:1个8位的I/O端口(端口F)1个9位的I/O端口(端口H)1个13位I/O端口(端口J)1个11位I/O端口(端口B)4个16位I/O端口(端口C、D、E、G)1个25位输出端口(端口A),4,8.1.1 S3C2440的I/O端口,每组端口可以通过软件配置端口控制寄存器来满足不同系统和设计的需要。在运行 主程序之前,必须先对用到的每一个引脚功能进行设置。如果某些引脚的复用功能没有使用,可将该引脚先设置为I/O口。,5,

2、8.1.1 S3C2440的I/O端口,datasheetUm_s3c2440a_rev.pdf中 9.IO Ports,6,8.1.2 S3C2440芯片与端口相关的寄存器,(1)端口控制寄存器(GPACON-GPJCON):配置每一个引脚的工作模式(2)端口数据寄存器(GPADAT-GPJDAT):当端口配置为输出引脚时,输出数据的方法是将数据写到GPADAT-GPJDAT的相应位;当端口配置为输入引脚时,读入数据的方法是将GPADAT-GPJDAT的相应位读出。,7,8.1.2 S3C2440芯片与端口相关的寄存器,(3)端口上拉寄存器(GPBUP-GPJUP):设置端口上拉寄存器,可以

3、设置该组端口与内部上拉电阻连接或断开。当寄存器相应的位配置为0时,该引脚接上拉电阻,当寄存器相应的位配置为1 时,该引脚不接上拉电阻。(4)外部中断控制寄存器(EXTINT):根据外部中断的需要,将中断触发信号配置为低电平触发、高电平触发、下降沿触发和上升沿触发和边沿触发几种方式。,8,8.1.3 应用实例um_s3c2440a_rev10.pdf 37页,发光二极管控制电路:端口F 6、7引脚分别与LED1 和LED2 连接,端口输出低电平时,LED灯亮;电平,LED灯灭。,9,代码分析:,Void Led_Display(int LedStatus)Led_state= LedStatus

4、;if(LedStatus,最低位为1,第6位为0,LED1亮,第6位为1,LED1灭,第2位为1,第7位为0,LED2亮,第7位为1,LED2灭,结论:若想要LED1亮,只需将LedStatus最低位为1即可,为0则LED1 灭; 若想要LED2亮,只需将LedStatus第2位为1即可,为0则LED2 灭;,10,I/O端口控制寄存器,11,12,端口A数据寄存器,当端口配置为输出口,输出引脚的状态与GPADAT的相应位相同;当端口配置为功能引脚时,此控制寄存器的未定义。,13,端口B,14,15,端口B,16,端口F,17,端口F-控制寄存器,18,端口F-数据寄存器和上拉寄存器,19,

5、2440addr.h文件中关于I/O口寄存器的定义,/ I/O PORT #define rGPACON (*(volatile unsigned *)0x56000000)/Port A control#define rGPADAT (*(volatile unsigned *)0x56000004)/Port A data#define rGPBCON (*(volatile unsigned *)0x56000010)/Port B control#define rGPBDAT (*(volatile unsigned *)0x56000014)/Port B data#define r

6、GPBUP (*(volatile unsigned *)0x56000018)/Pull-up control B#define rGPCCON (*(volatile unsigned *)0x56000020)/Port C control#define rGPCDAT (*(volatile unsigned *)0x56000024)/Port C data#define rGPCUP (*(volatile unsigned *)0x56000028)/Pull-up control C#define rGPDCON (*(volatile unsigned *)0x5600003

7、0)/Port D control#define rGPDDAT (*(volatile unsigned *)0x56000034)/Port D data#define rGPDUP (*(volatile unsigned *)0x56000038)/Pull-up control D,20,#define rGPECON (*(volatile unsigned *)0x56000040)/Port E control#define rGPEDAT (*(volatile unsigned *)0x56000044)/Port E data#define rGPEUP (*(volat

8、ile unsigned *)0x56000048)/Pull-up control E#define rGPFCON (*(volatile unsigned *)0x56000050)/Port F control#define rGPFDAT (*(volatile unsigned *)0x56000054)/Port F data#define rGPFUP (*(volatile unsigned *)0x56000058)/Pull-up control F#define rGPGCON (*(volatile unsigned *)0x56000060)/Port G cont

9、rol#define rGPGDAT (*(volatile unsigned *)0x56000064)/Port G data#define rGPGUP (*(volatile unsigned *)0x56000068)/Pull-up control G#define rGPHCON (*(volatile unsigned *)0x56000070)/Port H control#define rGPHDAT (*(volatile unsigned *)0x56000074)/Port H data#define rGPHUP (*(volatile unsigned *)0x5

10、6000078)/Pull-up control H#define rGPJCON (*(volatile unsigned *)0x560000d0)/Port J control#define rGPJDAT (*(volatile unsigned *)0x560000d4)/Port J data#define rGPJUP (*(volatile unsigned *)0x560000d8)/Pull-up control,#define rGPFCON (*(volatile unsigned *)0x56000050)/Port F control#define rGPFDAT

11、(*(volatile unsigned *)0x56000054)/Port F data#define rGPFUP (*(volatile unsigned *)0x56000058)/Pull-up control F,21,*关于volatile的说明*,volatile的本意是“易变的” ;由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。比如:static int i=0;int main(void).while (1) if (i) dosomething(); ,/* Interrupt service routine. */void ISR_2

12、(void) i=1; ,22,*关于volatile的说明*,程序的本意是希望ISR_2中断产生时,在main当中调用dosomething函数,但是,由于编译器判断在main函数里面没有修改过i,因此可能只执行一次对从i到某寄存器的读操作,然后每次if判断都只使用这个寄存器里面的“i副本”,导致dosomething永远也不会被调用。如果将将变量加上volatile修饰,则编译器保证对此变量的读写操作都不会被优化(肯定执行)。此例中i也应该如此说明。,23,*关于volatile的说明*,一般说来,volatile用在如下的几个地方:1、中断服务程序中修改的供其它程序检测的变量需要加vol

13、atile;2、多任务环境下各任务间共享的标志应该加volatile;3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能有不同意义。,24,端口初始化函数 IO_test2440lib.c,void Port_Init(void) rGPACON = 0x7fffff; rGPBCON = 0x000150; rGPBUP = 0x7ff; rGPCCON = 0xaaaaaaaa; rGPCUP = 0xffff;,25,rGPDCON = 0xaaaaaaaa; rGPDUP = 0xffff;rGPECON = 0xa02aa800; rGPEUP = 0

14、xffff; rGPFCON = 0x55aa; rGPFUP = 0xff;,含义?,26,GPF4 F5 F6 F7 D1 D2 D3 D4,实现灯的闪烁-自左至右,27,/*函数名:left_right()函数作用:实现4个led灯从左到右依次亮函数参数:无返回值:无作者:李建义完成日期:2010年9月27日*/void left_right( )while(Uart_GetKey() != r)rGPFDAT = rGPFDAT ,void left_right( )while(Uart_GetKey() != r)rGPFDAT = rGPFDAT ,28,LED显示程序代码分析:m

15、ain_io.c,void Led_Test1(void)Uart_Printf( LED Test, press Enter key to exit !n ) ;while(Uart_GetKey() != r)Delay(1000);Led_Display(0x8);Delay(1000);Led_Display(0x4);Delay(1000);Led_Display(0x2);Delay(1000);Led_Display(0x1);Delay(1000);Led_Display(0xF);Delay(1000);Led_Display(0x0);,29,E:SINOSYSExperi

16、mentIOSourceCodeIO_test2440lib.c,void Led_Display(int data) /Active is low.(LED On) / GPF7 GPF6 GPF5 GPF4 /nLED_8 nLED4 nLED_2 nLED_1rGPFDAT = (rGPFDAT ,4-7位清0,其他位不变,4-7位置位,其它位不变,结论:data的0-3位对应led1-4,要使对应的灯亮,data相应位为1, rGPFDAT对应的位为0即可,30,本课小结,掌握I/O口配置的方法;端口控制寄存器端口上拉寄存器掌握I/O口读、写数据的方法端口数据寄存器,31,周四实验,通用I/O口实验-跑马灯(实验16 IO_test)任务:修改程序,分别使4个灯亮的顺序为自右至左、自左至右、中间到两边、两边到中间、从左到右顺序亮,然后全灭、从右到左顺序亮,然后全灭。分别编写这几个函数,写在实验报告上下周一上机:2:00-3:45:3、4、5、6班汇编下周四上机 2:004:00单元:第1、2班 4:00-6:00单元:第3、5班 下周六8:30-10:00:4、6班,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报