DSPTMS320F28335入门
DSPTMS320F28335系列1、GPIO和点亮LED
- 一、C语言基础
- 二、GPIO的知识
- 三、结构体代码
- 3.1、结构体变量:GpioCtrlRegs
- 3.2、第一级成员:GPCMUX1
- 3.3第二级成员:bit
- 3.4结构体展示
- 四、代码GPIO点亮LED灯
一、C语言基础
结构体
struct_ strframe str.fra_datal; //定义了一个结构体变量,变量名为str_fra_datal
结构体是一种复合数据类型,它定义的变量中有三种不同性质的元素,它和其他的基本数据类型功能是一样的。对这种类型的变量的赋值方法,如str_fra_data1.sh_fra1=Ox04;还可以定义指针或是数组,如struct str.frame*str_fra_data2;,这时的赋值方法为:str_fra_datal -> sh_fra1=Ox04;。所有的C语句都以“﹔”结尾。
声明描述了一个short、一个long和一个float变量组成的结构体。但是注意,它并没有创建一个实际的数据对象,而是描述了一个组成这类对象的元素。因此,我们有时候也将结构体声明叫做模板,因为它勾勒出数据该如何存储,并没有实例化数据对象。
1、首先使用关键字struct,它表示接下来是一个结构体。
2、后面是一个可选的标志(str_fra1),它是用来引用该结构体的快速标记。因此我们以后就可以这样创建数据对象。
struct str_fra1 str_fra_data1;//把str_fra_data1设为一个可以使用str_fra1结构体的结构体变量,则str_fra_data1这个变量就包含了其str_fra1结构体中的所有元素。
2、接下来就是一个花括号,括起了结构体成员列表,及每个成员变量,使用的都是其自己的声明方式来描述,用分号来结束描述;
3、例如:char title[MAXTITL];字符数组就是这样声明的,用分号结束;
注意:其中每个成员可以使用任何一种C数据结构甚至是其他的结构体,也是可以的;
在结束花括号后的分号表示结构体设计定义的结束。
4、关于其struct声明的位置,也就是这段代码要放到哪里。同样这也是具有作用域的。
5、这种声明如果放在任何函数的外面,那么则可选标记可以在本文件中,该声明的后面的所有函数都可以使用。如果这种声明在某个函数的内部,则它的标记只能在内部使用,并且在其声明之后;
6、一般格式就是:
struct 结构体名(也就是可选标记名){ 成员变量;};//使用分号表示定义结束。
定义结构体变量
之前我们结构体类型的定义(结构体的声明)只是告诉编译器该如何表示数据,但是它没有让计算机为其分配空间。我们要使用结构体,那么就需要创建变量,也就是结构体变量; 创建一个结构体变量;
struct book library;
看到这条指令,编译器才会创建一个结构体变量library,此时编译器才会按照book模板为该变量分配内存空间,并且这里存储空间都是以这个变量结合在一起的。这也是后面访问结构体变量成员的时候,我们就要用到结构体变量名来访问。
struct book的作用:
在结构体声明中,struct book所起到的作用就像int,,,,等基础数据类型名作用一样。
struct book s1,s2,*ss;
定义两个struct book结构体类型的结构体变量,还定义了一个指向该结构体的指针,其ss指针可以指向s1,s2,或者任何其他的book结构体变量。struct book library;等效于;struct book{ char … …. …… }librar;这两种是等效的,只是第一种可以减少代码的。
二、GPIO的知识
CPU 要处理外界二进制信息(数字量),要将其存放在存储器中,就需要外界信息源与CPU或存储器进行交换,这样的交换接口若用来进行通用目的数字量的输入输出,就被称为通用数字量输入/输出接口,简称GPIO。F28335有88个 GPIO,F28335将这88个 GPIO口分成了A、B、C这3大组,A组包括 GPIO0~GPIO31,B组包括GPIO32~GPIO63,C组包括GPIO64~GPIO87,每个引脚都复用了多个功能,同一时刻,每个引脚只能用该引脚的一个功能。
88个GPIO分为3组:
组名 | GPIO范围 | 写法 |
---|---|---|
A组 | GPIO0 - GPIO31 | GPA |
B组 | GPIO32 - GPIO63 | GPB |
C组 | GPIO64- GPIO88 | GPC |
2、寄存器及其配置。
控制寄存器名 | 功能 | 含义 |
GPxMUXn | 复用功能寄存器 | 决定GPIO口是否复用。每2bit表示一个GPIO,故可取值00/01/10/11,即:0/1/2/3。0:关闭复用功能,当做普通IO口使用1/2/3:打开复用功能,对应具体复用功能,请查看数据手册 注意:n可以取值1 or 2 原因:mux为32位寄存器,每2bit表示一个GPIO,故一个mux寄存器只能表示16个GPIO口。而每组GPIO有32个GPIO,故要全部表示需要2个MUX寄存器,即:MUX1和MUX2MUX1:每组GPIO的前半部分,如:GPIO0 ~GPIO15MUX2:每组GPIO的后半部分,如:GPIO16 |
GPxDIR | IO方向寄存器 | 配置IO方向 0:输入 1:输出 |
GPAPUD | 是否上拉寄存器 | 0:上拉 1:不上拉 |
数据寄存器名 | 功能 | 含义 |
GPxDAT | 独立读写IO口寄存器 | 当IO方向为输入时为只读寄存器; 当IO方向为输出时,可以通过GPxSET设置该寄存器值 |
GPxSET | 置1寄存器 | 写1有效,写0无效 |
GPxCLEAR | 清0寄存器 | 写1有效,写0无效 |
GPxTOOGLE | 翻转寄存器 | 写1有效,写0无效 |
三、结构体代码
为了实现需要了解GPIO的设置。
3.1、结构体变量:GpioCtrlRegs
#ifdef __cplusplus
#pragma