[MCU]

【MSP430i2xx教程第一讲】怎样使用库函数 & GPIO详解

[复制链接]
楼主: xlhtracy
手机看帖
扫描二维码
随时随地手机跟帖
数码小叶| | 2015-3-24 16:30 | 显示全部楼层
gaoyang9992006 发表于 2015-3-24 16:13
嗯,你很细心啊,那个问题就是他们制作库函数时候的一个失误,不过最新版的CCS给的是1.97,这几天刚更新 ...

你那几个问题提的虽然不是很难,可是真要回答的让人信服,还得找到寄存器出处,赞一个,目测,下班前ccs是没戏了

使用特权

评论回复
gaoyang9992006| | 2015-3-24 16:42 | 显示全部楼层
数码小叶 发表于 2015-3-24 16:30
你那几个问题提的虽然不是很难,可是真要回答的让人信服,还得找到寄存器出处,赞一个,目测, ...

你很认真用心的,谢谢参与。

使用特权

评论回复
lvyunhua| | 2015-3-24 17:13 | 显示全部楼层
问题1;因为其他4个关于中断设置的函数只有P1,P2,PA(前面说过P1和P2组合后作为字标记为PA)有效。

使用特权

评论回复
龙1985| | 2015-3-24 17:58 | 显示全部楼层
xlhtracy 发表于 2015-3-24 10:06
该函数获取所选管脚的输入值。     该函数具有两个参数:selectedPort(所选端口)和selectedPins(所选 ...

GPIO_setAsOutputPin()
GPIO_setAsInputPin()

用过几种单片机,当然是从51入手的。我的问题是在用51的时候没记得需要先配置IO为输入或输出状态啊。要输出一个电平直接PINx=0/1。要读入一个引脚的电平,直接变量temp=PINx。但是后来用到的几种单片机比如430,在使用引脚的时候就需要事先配置IO口为in或out,这是为什么呢~~~,求解

使用特权

评论回复
3qxj| | 2015-3-24 19:09 | 显示全部楼层
"断言"说的是"断点"吧?

使用特权

评论回复
胡斯哲| | 2015-3-24 20:34 | 显示全部楼层
用库函数太复杂了点,觉得还是用寄存器好些

使用特权

评论回复
dirtwillfly| | 2015-3-24 20:58 | 显示全部楼层
支持一下

使用特权

评论回复
必胜客A| | 2015-3-24 21:03 | 显示全部楼层
在pdf版2.1本章引言中的第3段第一句话,存在编辑问题,“中断院子”,
弄的不错,正在研读

使用特权

评论回复
必胜客A| | 2015-3-24 21:08 | 显示全部楼层
在pdf版2.1本章引言中的第5段第2.1端口,存在编辑问题,“PB、P、PD、PE和PF也是类似的。”
加油,弄的很好

使用特权

评论回复
必胜客A| | 2015-3-24 21:36 | 显示全部楼层
1、为什么关于中断边沿选择的函数GPIO_interruptEdgeSelect()的参数selectedPort可以有18个量可以选择,而不是像其他4个关于中断设置的函数,只有GPIO_PORT_P1、GPIO_PORT_P2、GPIO_PORT_PA 三个量可以选择?
问题一:
首先,要准备下基础知识:
1、端口P1和P2都具备中断功能。P1和P2两组端口的每一位管脚都可以单独配置成在输入一个上升沿或下降沿时候触发中断的功能。
2、单个端口可以作为可以以字节宽度进行访问,也可以合二为一组合成字宽,以字的格式进行访问。P1/P2, P3/P4, P5/P6, P7/P8,四对端口分别对应PA、PB、PC、PD。除了中断向量P1IV和P2IV外,所有的端口寄存器是按照这种命名约定方式处理的,也就是说不存在中断向量PAIV。
从这里我们可以看出,为什么只有GPIO_PORT_P1、GPIO_PORT_P2、GPIO_PORT_PA这三个量,而不是P3或者PB,因为只有端口P1和P2都具备中断功能。
那么下面我们继续来解释这个问题,解决这个问题前,依旧需要准备点知识,我们来看下这个五个中断函数以及功能:
void GPIO_enableInterrupt (uint8_t selectedPort, uint16_t selectedPins)
该函数使能所选管脚的端口中断功能
void GPIO_disableInterrupt (uint8_t selectedPort, uint16_t selectedPins)
该函数禁用所选管脚端口的中断
uint16 t GPIO_getInterruptStatus (uint8_t selectedPort, uint16_t selectedPins)
该函数可以获取被选中的端口的中断状态
void GPIO_clearInterruptFlag (uint8 t selectedPort, uint16 t selectedPins)
该函数可以清除所选管脚的中断标志
void GPIO_interruptEdgeSelect (uint8_t selectedPort, uint16_t selectedPins, uint8_t edgeSelect)
该函数可以对所选管脚的中断触发边沿类型进行选择(是上升沿触发还是下降沿触发)

从这里可以看到这GPIO_enableInterrupt 、GPIO_disableInterrupt 、GPIO_getInterruptStatus 、GPIO_clearInterruptFlag 这几个中断函数都是针对具备中断功能的端口的,所有根据之前的介绍,很容易明白“其他4个关于中断设置的函数,只有GPIO_PORT_P1、GPIO_PORT_P2、GPIO_PORT_PA 三个量可以选择”。

说了这么多,还有一个关键的没讲“为什么关于中断边沿选择的函数GPIO_interruptEdgeSelect()的参数selectedPort可以有18个量可以选择”,继续补充必要的知识:
1、该系列单片机具备的I/O端口数量最高可达12组(P1至P11,外加PJ端口)。
2、具体的18个值,selectedPort可选的有效值有18(11+7)个:GPIO_PORT_P1、GPIO_PORT_P2……GPIO_PORT_P11,GPIO_PORT_PA、GPIO_PORT_PB、GPIO_PORT_PC、GPIO_PORT_PD、GPIO_PORT_PE、GPIO_PORT_PF、GPIO_PORT_PJ。

从这里可以看出18个值是怎么来的,另外注意看下GPIO_interruptEdgeSelect的功能是“该函数可以对所选管脚的中断触发边沿类型进行选择(是上升沿触发还是下降沿触发)”也就是说所有的脚都是它可以选择的,也就是说所以的端口都是可以选择的,所有就有了18个量。

使用特权

评论回复
必胜客A| | 2015-3-24 21:37 | 显示全部楼层
另外不知道作者是否察觉,2.2章节中的,函数功能详细介绍那部分函数的排序问题

使用特权

评论回复
123tango| | 2015-3-24 21:38 | 显示全部楼层
3qxj 发表于 2015-3-24 19:09
"断言"说的是"断点"吧?

断言应该是指C语言中的一种语法吧

使用特权

评论回复
123tango| | 2015-3-24 21:39 | 显示全部楼层
我觉得16位的430 可以不用库函数的,32位的ARM应该用库函数

使用特权

评论回复
必胜客A| | 2015-3-24 21:40 | 显示全部楼层
5楼存在编辑问题,“GPIO_setOutputHighOnPin (GPIO_PORT_P1, GPIOfile:///C:\Users\samsung\AppData\Local\Temp\ksohtml\wpsC305.tmp.pngPIN0)”,可以使用Ctrl+F来找到地方

使用特权

评论回复
必胜客A| | 2015-3-24 22:11 | 显示全部楼层
2、在表3中给出的selectedPort所选的18个量,我用不同颜色做了标记,根据本章2.1引言部分介绍,PA就是P1和P2的合,那么在位的对应关系上,是怎样对应的,是高位在前还是低位在前?请结合手册找出该对应关系。

问题二:P1对应的是低位,P2是高位,
另外这个“是高位在前还是低位在前?”问题??

使用特权

评论回复
必胜客A| | 2015-3-24 22:26 | 显示全部楼层
总体上还是不错的,不过如果需要对多个位进行设置时,是怎么处理的呢GPIO_PIN0是否等同于0X0001呢,期待大家的精彩分享,程序什么的过两天再写,哈哈

使用特权

评论回复
dirtwillfly| | 2015-3-24 22:30 | 显示全部楼层
数码小叶 发表于 2015-3-24 12:16
没有片子,只能观望

msp430i系列是工业应用条件的ic,功能和msp
430g系列基本一致。可以用msp
430g来学习这些库函数

使用特权

评论回复
dirtwillfly| | 2015-3-24 22:32 | 显示全部楼层
gaochy1126 发表于 2015-3-24 14:47
iar的教程有没有

顶楼有描述,函数在iar下也是可以使用的

使用特权

评论回复
dirtwillfly| | 2015-3-24 22:35 | 显示全部楼层
数码小叶 发表于 2015-3-24 15:40
有这么一段话:“单个端口可以作为可以以字节宽度进行访问,也可以合二为一组合成字宽,以字的格式进行访问 ...

这个问题可以尝试找一下PA的宏定义,应该能说明原因。

使用特权

评论回复
dirtwillfly| | 2015-3-24 22:39 | 显示全部楼层
龙1985 发表于 2015-3-24 17:58
GPIO_setAsOutputPin()
GPIO_setAsInputPin()


这个和io的结构有关。
总的来说,51单片机io的寄存器更少,功能选择也更少

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则