博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LPC2103学习之GPIO
阅读量:6709 次
发布时间:2019-06-25

本文共 1033 字,大约阅读时间需要 3 分钟。

hot3.png

不写作业写博客

 

直接切入正题

 

LPC2103关于引脚的寄存器有两个PINSEL0与PINSEL1,都是32位宽度。

 

PINSEL0与PINSEL1寄存器的每两位控制一个引脚的功能,则一个脚最多有4种功能。其中PINSEL0控制着P0.0到P0.15的引脚。PINSEL1控制着P0.16到P0.31的引脚。

 

PINSEL寄存器的设置只需两个步骤。一找到要设置的引脚。二是选择引脚的功能。

如图所示:

下面举例说明

1.设置P0.0为GPIO功能

PINSEL0 = 0x00   /*设置P0.0到P0.15都为GPIO*/

2.设置P0.0为TxD0功能

PINSEL0 = (PINSEL0 & 0xFFFFFFFC) | 0x01;       /*设置P0.0的功能为TxD0*/

当然如果为了不改变原来引脚的功能。你应该采取“读取——修改——回写”的方式进行。即先读取寄存器值,然后进行一些逻辑的与、或等操作,最后把修改值再写回寄存器。

比如:

PINSEL0 = (PINSEL0 & 0xFFF0FFFF) | (0x05 << 16);  /*设置P0.8与P0.9功能为TxD1/RxD1*/

 

关于LPC2103的GPIO

      LPC2103只有一个32位的通用IO口。由于引脚的功能复用,使用前必须进行相关引脚设置,再进行操作。比如P0.27到P0.31就是JTAG调试引脚。LPC2103的GPIO模式有低速与高速模式。

高速GPIO的控制寄存器位于CPU的局部总线上,而低速GPIO的控制寄存器是挂在VPB总线上。P0口作为高速GPIO使用时,将不能在调试环境下观察在VPB总线上的寄存器。

下面是一些寄存器的描述。直接上图好些。

剩余的以后需要时再补充,现在只需要用到这些。参考资料来自于《EasyARM2103教材》

 

每天进步一点,以后可不就是一点咯。大笑

 

 补注:就在刚才写流水灯程序时发现一个问题

#define LED1 1<<17

for(i=0;i<4;i++)

  {
   IO0CLR = (LED1<<i);

// IO0CLR |= (LED1<<i);

   Delay(100);
  }

我发现这里用=与|=得到的都是相同的结果。这是为什么呢?我想的是等于应该是会把以前的值擦除,那么每次应该是一个灯亮。但是实际是4个灯依次亮。希望知道的告诉我一下啊,不胜感激。快哭了

 

 

 

转载于:https://my.oschina.net/u/1587304/blog/399944

你可能感兴趣的文章
Java 异常处理的误区和经验总结
查看>>
Windows性能监视器
查看>>
舌尖上的程序猿
查看>>
篮球术语
查看>>
Apache代理80端口
查看>>
Android Demos
查看>>
常用的PHP正则表达式汇总
查看>>
HDU 3215 The first place of 2^n (数论-水题)
查看>>
android之PackageManager简单介绍
查看>>
tsinsen A1067. Fibonacci数列整除问题 dp
查看>>
把普通的git库变成bare库
查看>>
[LeetCode]Swap Nodes in Pairs 成对交换
查看>>
C# VS预生成事件命令行 和 生成后事件命令行
查看>>
Chapter 1 Securing Your Server and Network(1):选择SQL Server运行账号
查看>>
JAVA程序猿面试题汇总
查看>>
Java基础复习笔记系列 九 网络编程
查看>>
[LeetCode] Edit Distance 编辑距离
查看>>
奇怪吸引子---Chua
查看>>
C与C++在const用法上的区别
查看>>
malloc的内存分配原理
查看>>