[MCU]

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

[复制链接]
楼主: xlhtracy
手机看帖
扫描二维码
随时随地手机跟帖
112207301219| | 2015-3-27 15:51 | 显示全部楼层
anvy178 发表于 2015-3-27 15:46
你看宏定义的端口  如果是字节寻址的 那些参量宏 是有奇数 偶数的
字定义的端口 就没有 偶数 ...

void GPIO_interruptEdgeSelect(uint8_t selectedPort,
                              uint16_t selectedPins,
                              uint8_t edgeSelect) {
    uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];

    #ifndef NDEBUG
    if(baseAddress == 0xFFFF)
    {
        return;
    }
    #endif

    // Shift by 8 if port is even (upper 8-bits)
    if((selectedPort & 1) ^ 1)
    {
        selectedPins <<= 8;
    }

    if(GPIO_LOW_TO_HIGH_TRANSITION == edgeSelect)
    {
        HWREG16(baseAddress + OFS_PAIES) &= ~selectedPins;
    }
    else
    {
        HWREG16(baseAddress + OFS_PAIES) |= selectedPins;
    }
}
哪里区分PA和P1啊,宏定义中PA和P1都是1。
if((selectedPort & 1) ^ 1)这句话不太明白。PA和P1代进去有区别吗?

使用特权

评论回复
anvy178| | 2015-3-27 16:20 | 显示全部楼层
本帖最后由 anvy178 于 2015-3-27 16:29 编辑
112207301219 发表于 2015-3-27 15:51
void GPIO_interruptEdgeSelect(uint8_t selectedPort,
                              uint16_t selecte ...

我是这么理解的  如果你是字节的话  应该就没有pin8之后的管脚的 因为字节的话  你最多就8个脚
字的话 才有16个脚  根据他那些宏定义的数据来说  p1端口 跟 PA 其实是同一个玩意,只是为了从概念上区分 。
因为数值上   GPIO_PORT_P1 与 GPIO_PORT_PA 是一样的 。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
gaoyang9992006 + 2 赞一个!
董自祝| | 2015-3-27 18:08 | 显示全部楼层
一般库函数写程序好一点还是寄存器好一点啊?

使用特权

评论回复
gaoyang9992006| | 2015-3-27 18:29 | 显示全部楼层
112207301219 发表于 2015-3-27 15:17
程序中那个地方用来区分字寻址和字节寻址的呢?我没找到。能否指出来?谢了。 ...

#define GPIO_PORT_P1                                                          1
#define GPIO_PORT_P2                                                          2
#define GPIO_PORT_P3                                                          3
#define GPIO_PORT_P4                                                          4
#define GPIO_PORT_P5                                                          5
#define GPIO_PORT_P6                                                          6
#define GPIO_PORT_P7                                                          7
#define GPIO_PORT_P8                                                          8
#define GPIO_PORT_P9                                                          9
#define GPIO_PORT_P10                                                        10
#define GPIO_PORT_P11                                                        11
#define GPIO_PORT_PA                                                          1
#define GPIO_PORT_PB                                                          3
#define GPIO_PORT_PC                                                          5
#define GPIO_PORT_PD                                                          7
#define GPIO_PORT_PE                                                          9
#define GPIO_PORT_PF                                                         11
#define GPIO_PORT_PJ                                                         13--------------------------------------------------------------------------------------
看头文件的宏,在A开始后,是按照2字节宽度开始起名字,所以如果操作时候使用2字节宽度的操作就是2字节,如果还是使用1字节宽度的操作,那么就是只对PA的低8位操作

使用特权

评论回复
gaoyang9992006| | 2015-3-27 18:31 | 显示全部楼层
董自祝 发表于 2015-3-27 18:08
一般库函数写程序好一点还是寄存器好一点啊?

如果你不想花时间去研究这个芯片有多少寄存器,寄存器怎么用,速成法或者可移植性强就选中库函数,这个也是大势所趋,所以TI开始考虑以后推出功能更加强大的MSP430将会加入库函数概念。

使用特权

评论回复
awficel1| | 2015-3-28 08:11 | 显示全部楼层
太好了,有PDF下载.谢谢.

使用特权

评论回复
feiting94| | 2015-3-28 10:02 | 显示全部楼层
必胜客A 发表于 2015-3-24 21:36
1、为什么关于中断边沿选择的函数GPIO_interruptEdgeSelect()的参数selectedPort可以有18个量可以选择,而 ...

楼主是这样写的,GPIO_interruptEdgeSelect(),该函数是通过修改寄存器PxIES实现,返回值 None(空)。
如果你查看寄存器手册的话,可以看到,只有寄存器P1IES,P2IES,PAIES存在,因此这里我认为不应该有18个可选的selectedPort,应该只有3个

使用特权

评论回复
feiting94| | 2015-3-28 10:14 | 显示全部楼层
xlhtracy 发表于 2015-3-24 10:57
2.5  问题提出1.为什么关于中断边沿选择的函数GPIO_interruptEdgeSelect()的参数selectedPort可以有18个量 ...

我觉得快速学习库函数的方法就是查看对应模块头文件里面所有函数,利用函数名称可以很快知道这个函数的用途。我当时学stm32f407时,就是利用这个办法学习的。而且如果想知道这个函数的原理。可以追根溯源,查找这个函数是对哪个寄存器操作的,从而知其所以然

使用特权

评论回复
awficel1| | 2015-3-28 10:19 | 显示全部楼层
1答:其他4个关于中断设置的函数,只有P1、P2、PA具有该功能.

使用特权

评论回复
zrk787| | 2015-3-28 12:48 | 显示全部楼层
好活动,谢谢楼主分享!

使用特权

评论回复
anvy178| | 2015-3-28 15:43 | 显示全部楼层
gaoyang9992006 发表于 2015-3-27 18:29
#define GPIO_PORT_P1                                                          1
#define GPIO_PORT_ ...

亲  这个ccs 使用 需要注册码吗?

使用特权

评论回复
112207301219| | 2015-3-28 16:19 | 显示全部楼层
gaoyang9992006 发表于 2015-3-27 18:29
#define GPIO_PORT_P1                                                          1
#define GPIO_PORT_ ...

不好意思还是不太明白,能不能在.c里面指出具体的地方,谢了!

使用特权

评论回复
强仔00001| | 2015-3-28 22:58 | 显示全部楼层
我个人看法还是直接操作寄存器好些,我也是一直以来都是用寄存器操作,毕竟16位机也不是很复杂

使用特权

评论回复
gaoyang9992006| | 2015-3-29 13:18 | 显示全部楼层
112207301219 发表于 2015-3-28 16:19
不好意思还是不太明白,能不能在.c里面指出具体的地方,谢了!

在头文件的.h里。

使用特权

评论回复
gaoyang9992006| | 2015-3-29 13:19 | 显示全部楼层
anvy178 发表于 2015-3-28 15:43
亲  这个ccs 使用 需要注册码吗?

可以选择使用90天版本,或者使用代码大小限制版本。

使用特权

评论回复
gaoyang9992006| | 2015-3-29 13:20 | 显示全部楼层
强仔00001 发表于 2015-3-28 22:58
我个人看法还是直接操作寄存器好些,我也是一直以来都是用寄存器操作,毕竟16位机也不是很复杂 ...

不是不复杂,是即将推出功能更强大,结构更复杂的芯片。

使用特权

评论回复
强仔00001| | 2015-3-29 14:42 | 显示全部楼层
gaoyang9992006 发表于 2015-3-29 13:20
不是不复杂,是即将推出功能更强大,结构更复杂的芯片。

已经出了吧,MSP432,好像有一套

使用特权

评论回复
gaoyang9992006| | 2015-3-29 15:36 | 显示全部楼层
强仔00001 发表于 2015-3-29 14:42
已经出了吧,MSP432,好像有一套

是的,已经出了,还有FR系列,功能很强大的。

使用特权

评论回复
yangshoot| | 2015-3-29 20:36 | 显示全部楼层
楼主能编成PDF便于下载阅读就好了

使用特权

评论回复
又一个暑假| | 2015-3-30 09:35 | 显示全部楼层
学习学习

使用特权

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

本版积分规则