搜索
bottom↓
回复: 10

LPC1768新手问下关于官方固件库中IO函数中Port形参的含义

[复制链接]

出0入16汤圆

发表于 2017-8-18 16:29:27 | 显示全部楼层 |阅读模式
#define LPC_GPIO0_BASE            0x2009C000
#define LPC_GPIO1_BASE            0x2009C020
#define LPC_GPIO2_BASE            0x2009C040
#define LPC_GPIO3_BASE            0x20098060
#define LPC_GPIO4_BASE            0x2009C080

typedef enum {
        GPIOINT_PORT0,             /*!< GPIO PORT 0 */
        GPIOINT_PORT2 = 2          /*!< GPIO PORT 2 */
}LPC_GPIOINT_PORT_T;

#define LPC_GPIO                  ((LPC_GPIO_T             *) LPC_GPIO0_BASE)
#define LPC_GPIOINT               ((LPC_GPIOINT_T          *) LPC_GPIOINT_BASE)

#define GPIO_INTERRUPT_PIN     17        /* GPIO pin number mapped to interrupt */
#define GPIO_INTERRUPT_PORT    GPIOINT_PORT0        /* GPIO port number mapped to interrupt */

int main(void)
{
        /* Generic Initialization */
        SystemCoreClockUpdate();

        /* Board_Init calls Chip_GPIO_Init and enables GPIO clock if needed,
           Chip_GPIO_Init is not called again */
        Board_Init();
        Board_LED_Set(0, false);

        /* Configure GPIO interrupt pin as input */
        Chip_GPIO_SetPinDIRInput(LPC_GPIO, GPIO_INTERRUPT_PORT, GPIO_INTERRUPT_PIN);

        /* Configure the GPIO interrupt */
        Chip_GPIOINT_SetIntFalling(LPC_GPIOINT, GPIO_INTERRUPT_PORT, 1 << GPIO_INTERRUPT_PIN);

        /* Enable interrupt in the NVIC */
        NVIC_ClearPendingIRQ(GPIO_INTERRUPT_NVIC_NAME);
        NVIC_EnableIRQ(GPIO_INTERRUPT_NVIC_NAME);

        /* Wait for interrupts - LED will toggle on each wakeup event */
        while (1) {
                __WFI();
        }

        return 0;
}

不太明白这个函数中 形参 port的具体定义,一开始以为是P0~P4,但是看到enum里面只有 0和2,,瞬间傻了,不知道这个Port是干嘛的,而且这个Port形参每个IO口程序里面都有
STATIC INLINE void Chip_GPIO_SetPinDIRInput(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin)
{
        pGPIO[port].DIR &= ~(1UL << pin);
}

STATIC INLINE void Chip_GPIOINT_SetIntFalling(LPC_GPIOINT_T *pGPIOINT, LPC_GPIOINT_PORT_T port, uint32_t pins)
{
        if (port == GPIOINT_PORT0) {
                pGPIOINT->IO0.ENF = pins;
        } else {
                pGPIOINT->IO2.ENF = pins;
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入13汤圆

发表于 2017-8-18 17:01:47 | 显示全部楼层
Chip_GPIO  和 Chip_GPIOINT  ,你觉得这是一样的吗?

出0入16汤圆

 楼主| 发表于 2017-8-18 17:06:36 | 显示全部楼层
weiwei4 发表于 2017-8-18 17:01
Chip_GPIO  和 Chip_GPIOINT  ,你觉得这是一样的吗?

我知道不一样,就像知道这个 port定义,前面 GPIO0 、GPIO1、GPIO2都有宏定义了,只求点破

出0入0汤圆

发表于 2017-8-18 17:08:32 | 显示全部楼层
GPIO具有中断功能的PORT。
看看GPIO中断那部分。

出40入42汤圆

发表于 2017-8-18 17:13:01 | 显示全部楼层
看手册啊,里面的管脚配置表不是有port0和port2啥的吗?一般PIN都是0~31(数据位),然后分组成port

出0入16汤圆

 楼主| 发表于 2017-8-18 17:13:30 | 显示全部楼层
Excellence 发表于 2017-8-18 17:08
GPIO具有中断功能的PORT。
看看GPIO中断那部分。

他那两个函数的形参定义的不同 一个是 uint8 ,一个 是enum,调用同一个实参猜测是巧合,如果不用中断,这个port到底是哪个,他的每个关于io口的函数都有形参port

出0入13汤圆

发表于 2017-8-18 17:15:39 | 显示全部楼层
你说的只是0 和 2,这部分是引脚中断的定义,你去看看Datasheet,是不是其它port没有中断功能

出0入0汤圆

发表于 2017-8-18 17:18:46 | 显示全部楼层
初音之恋 发表于 2017-8-18 17:13
他那两个函数的形参定义的不同 一个是 uint8 ,一个 是enum,调用同一个实参猜测是巧合,如果不用中断, ...

我看后面两个函数,实参不一样啊。

出0入16汤圆

 楼主| 发表于 2017-8-18 17:46:54 | 显示全部楼层
STATIC INLINE void Chip_GPIO_SetPinState(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin, bool setting)
{
        if (setting) {        /* Set Port */
                pGPIO[port].SET |= 1UL << pin;
        }
        else {        /* Clear Port */
                pGPIO[port].CLR |= 1UL << pin;
        }
}

STATIC INLINE bool Chip_GPIO_GetPinState(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin)
{
        return (bool) ((pGPIO[port].PIN >> pin) & 1);
}

出0入0汤圆

发表于 2017-8-19 08:46:33 来自手机 | 显示全部楼层
建议用个好点编辑器看代码。另外把问题好好描述一下,前后一致,方便别人给你解答。为啥不直接用寄存器操作,简单明了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 04:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表