野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 24773|回复: 4

I\O口地址映射的问题

[复制链接]
发表于 2013-11-29 10:50:02 | 显示全部楼层 |阅读模式
#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)

//IO口操作宏定义
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))
#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))
//IO口地址映射
#define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
#define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C

//IO口操作,只对单一的IO口!
//确保n的值小于16!
#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //输出
#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //输入

//LED端口定义
#define LED0 PAout(8)// PA8
#define LED1 PDout(2)// PD2
这个从上到下的定义不太懂,火哥给详细的讲讲吧
回复

使用道具 举报

发表于 2013-11-29 11:16:24 | 显示全部楼层
上面的都是官方定义,这个需要查芯片手册,才知道。
宏定义的用法,这个需要你先学会。

GPIOA_BASE  GPIOA的基地址

BITBAND(addr, bitnum) 位带,就是 直接操作 1bit 数据,但不需要先读回来,修改那值结果,再写回去。


后面的,你想自己理解一下。

回复 支持 反对

使用道具 举报

发表于 2013-12-5 00:35:40 | 显示全部楼层
看帖回帖是美德!
回复 支持 反对

使用道具 举报

发表于 2013-12-5 09:14:20 | 显示全部楼层
好好 学习了 确实不错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 11:59 , Processed in 0.063273 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表