一起学CC3200系列教程之跑马灯---寄存器版
来源:互联网 发布:淘宝买家信用积分规则 编辑:程序博客网 时间:2024/05/17 02:36
本文为原创,转载请注明:http://blog.csdn.net/hytgab?viewmode=contents
注:能力有限,有问题请联系我,可不能害了大家,MADE BY 阿汤哥,QQ1519256298 hytga@163.com
本来是写在word上的,结果不能一键复制,图片还得一个一个拖过来,不知道效果怎么样
提供PDF下点击打开链接
现在我们来学习CC3200的跑马灯的寄存器例程。我们将学习如何把CC3200的IO口设置成输出模式,实现跑马灯效果。
(一)CC3200的IO口简介
(二)硬件设计
(三)软件设计
(一)CC3200的IO口简介
学过其他单片机的人都知道,把IO口设置成输出,一般需要4个步骤
1、 开启时钟信号
2、 设置映射
3、 设置IO口的输入输出模式
4、 设置IO的电平
因此,我们将介绍4个部分涉及到的寄存器,
1、 时钟寄存器
CC3200的datasheet有一个章节叫Power Reset and Clock manage(简称PRCM)其中有一部分就是时钟的设置,PRCM有以下的寄存器
这里我们只关心
CC3200的GPIO分成了4组,分别为GPIO A0 ,A1,A2,A3,其中GPIO0CLKEN寄存器就是管理A0的时钟使能问题,依次类推。
GPIO0CLKEN
这里我们可以看到有3个位可以设置,当芯片是run模式,我们就设置成0x01,睡眠模式0x10,深度睡眠0x100,
2、 引脚的映射成GPIO,datasheet有一章是IO Pads and Pin Multiplexing
下面是引脚映射表的局部,表示了一个引脚能够被映射成什么功能,不同的引脚能够被映射成不同的功能,一般地有GPIO,I2C,UART等,需要用到什么引脚就去看这个引脚的映射表
每一个引脚都有其对应的映射配置寄存器,如上图,其映射配置寄存器就是GPIO_PAD_CONDIG_10,
映射配置寄存器:
根据其描述,我们设置成GPIO模式,一般可以设置成0x20,
3、 设置成输出模式
因为CC3200有4组GPIO,因此有4组寄存器,
每组GPIO都有以下的寄存器
其中GPIODIR就是其输出输入配置寄存器
4、 接下来就是GPIO的数据配置寄存器
这个寄存器配置起来有点麻烦,
GPIO A0 的GPIODATA的地址是0x40004000,长度是0x400,GPIODATA寄存器占据4个字节,那么照理来说应该是0x100个GPIODATA,但是在这个0x400只有8个字节,那么是如何分配的了?
TI的datasheet给出了一张图
写例程:
读例程:
(本来是没看到上面的图的,然后按照自己的想法写了下面的内容,后面就把Ti的图给补上了)。
举例来说 GPIO A0的第0个引脚的GPIODATA寄存器的地址是
GPIO A0的第1个引脚的GPIODATA寄存器的地址是
GPIO A0的第2个引脚的GPIODATA寄存器的地址是
其他引脚以此类推,
规律就是
地址线的[9 : 2] 就是决定是哪个寄存器
[2]为1 决定的是第0个
[3]为1 决定的是第1个
[4]为1 决定的是第2个
[5]为1 决定的是第3个
[6]为1 决定的是第4个
[7]为1 决定的是第5个
[8]为1 决定的是第6个
[9]为1 决定的是第7个
刚刚好分配完。
那么应该对GPIODATA写入什么值了.
规律
多个引脚的电平 = 地址线[9:2] &值。
譬如:
地址线:位表示
值:位表示
运行代码
HWREG(0x1fc) = 0x7F
结果:
GPIO 除了第0个引脚(不受影响),其他全部输出高电平。
(二)硬件设计
采用的是CC3200的launchxla板子
引脚的映射配置寄存器的地址分别是
三个引脚是对应于GPIO的第几组内的第几个引脚?:TI给出了一张表格
GPIO_11 对应于 GPIO A1 的第3引脚
GPIO_10 对应于 GPIO A1 的第2引脚
GPIO_9 对应于 GPIO A1 的第1引脚
GPIO PORT A1的时钟地址是(0x44025000 + 0x58)这个地址我在datasheet没有看到,是在例程找到的
GPIO PORT A1 的寄存器基地址是 0x4000 5000
现在我们都找到了所有的寄存器地址
(三) 软件设计
void delay(int temp) {
int i = 0;
for (i = 0;i < temp;i++) {
}
}
void main(void) {
//初始化板子,我看了一下大概是中断向量表的映射,和其他的一些东西,这里我们不关心
BoardInit();
//使能GPIO A1 时钟
HWREG(0x44025000 + 0x58) = 0x01;
//设置GPIO 9的映射配置寄存器:GPIO模式
HWREG( 0x4402E0C4) = 0x20;
//设置GPIO 9的输入输入寄存器,输出
HWREG(0x40005000 + 0x400) |= 0x2;
//设置GPIO 10的映射配置寄存器:GPIO模式
HWREG( 0x4402E0C8) = 0x20;
//设置GPIO 10的输入输入寄存器,输出
HWREG(0x40005000 + 0x400) |= 0x4;
//设置GPIO 11的映射配置寄存器:GPIO模式
HWREG( 0x4402E0CC) = 0x20;
//设置GPIO 11的输入输入寄存器,输出
HWREG(0x40005000 + 0x400) |= 0x8;
//这里我多设置了一个GPIO,用于验证程序
//设置GPIO 8的映射配置寄存器:GPIO模式
HWREG( 0x4402E0C0) = 0x20;
//设置GPIO 8的输入输入寄存器,输出
HWREG(0x40005000 + 0x400) |= 0x1;
#if 1 //设置GPIO 8 输出1
HWREG(0x40005000 + 4 ) = 1;
#else//设置GPIO 8 输出0
HWREG(0x40005000 + 4 ) = 0;
#endif
while(1) {
#if 0//全闪,后全灭
HWREG(0x40005000 + (16+32+8 )) = 4 + 8 + 2 ;
delay(0xfffff);
HWREG(0x40005000 +(16+32+8)) = 0;
delay(0xfffff);
#else //跑马灯现象,闪的速度有点慢,自己调速度,
HWREG(0x40005000 + (8)) = 2;
delay(0xffffff);
HWREG(0x40005000 +(8)) = 0;
delay(0xffffff);
HWREG(0x40005000 + (16)) = 4;
delay(0xffffff);
HWREG(0x40005000 +(16)) = 0;
delay(0xffffff);
HWREG(0x40005000 + (32))= 8;
delay(0xfffffff);
HWREG(0x40005000 +(32)) = 0;
delay(0xffffff);
#endif
}
}
- 一起学CC3200系列教程之跑马灯---寄存器版
- 一起学CC3200系列教程之跑马灯---库
- 一起学CC3200系列教程之跑马灯---库
- 一起学CC3200系列教程之定时器
- 一起学CC3200系列教程之Systick
- 一起学CC3200系列教程之串口--库函数
- 一起学CC3200系列教程之ADC采集
- 一起学CC3200系列教程之中断优先级设置
- 一起学CC3200系列教程之文件操作
- 一起学cc3200系列教程之制作bootloader简介
- 一起学习CC3200系列教程之CC3200简介
- 一起学习CC3200系列教程之看门狗
- 一起学习CC3200系列教程之常见问题
- 一起学CC3200系列教程之IIC主机——注意点
- 一起学习CC3200系列教程之PWM模式
- 一起学习CC3200系列教程之HttpServer前序
- 一起学习CC3200系列教程之Yeelink传数据
- 一起学习CC3200系列教程之SDK简介
- 算法训练 Torry的困惑(基本型)
- 建立网络映射磁盘
- 依赖倒置
- java时间转换,把秒转换为小时,分钟
- warning: function declared implicitly错误原因
- 一起学CC3200系列教程之跑马灯---寄存器版
- 虚析构函数、纯虚析构函数、虚构造函数
- MATLAB中一些特殊的函数
- 切换csh的方法
- 浅析:ASP.NET和ASP的区别
- 字符设备实验之按键查询
- java温度转换,以及类型强制转换
- 欢迎使用CSDN-markdown编辑器
- Ubuntu+Nginx+PHP+ZBlog部署文档