发新帖我要提问
123
返回列表
打印
[DemoCode下载]

M051库函数分析GPIO

[复制链接]
楼主: mintspring
手机看帖
扫描二维码
随时随地手机跟帖
41
下面给出一个应用例子。
/*-----------------------------------------------------------------------------------------------------*/
    /* GPIO Interrupt Function Test                                                                        */
    /*-----------------------------------------------------------------------------------------------------*/
    printf("P1.3 and P4.5 are used to test interrupt ......\n");

    /* Configure P1.3 as Input mode and enable interrupt by rising edge trigger */
    GPIO_SetMode(P1, BIT3, GPIO_PMD_INPUT);
    GPIO_EnableInt(P1, 3, GPIO_INT_RISING);
    NVIC_EnableIRQ(GPIO_P0P1_IRQn);

    /*  Configure P4.5 as Quasi-bidirection mode and enable interrupt by falling edge trigger */
    GPIO_SetMode(P4, BIT5, GPIO_PMD_QUASI);
    GPIO_EnableInt(P4, 5, GPIO_INT_FALLING);
    NVIC_EnableIRQ(GPIO_P2P3P4_IRQn);

    /* Waiting for interrupts */

不难发现一共三条语句:1,设置IO工作模式,2,使能对应的中断类型,3,设置中断请求。
另外注意到:嵌套向量中断控制器:Nested Vectored Interrupt Controller (NVIC)


使用特权

评论回复
42
gaoyang9992006| | 2015-1-13 22:37 | 只看该作者
我们只是不知道第三条中断求求参量代表什么,我们看头文件。
/**
* @brief       Port0/Port1 IRQ
*
* @param       None
*
* @return      None
*
* @details     The Port0/Port1 default IRQ, declared in startup_M051Series.s.
*/
void GPIOP0P1_IRQHandler(void)
{
    /* To check if P1.3 interrupt occurred */
    if(GPIO_GET_INT_FLAG(P1, BIT3))
    {
        GPIO_CLR_INT_FLAG(P1, BIT3);
        printf("P1.3 INT occurred.\n");
    }
    else
    {
        /* Un-expected interrupt. Just clear all PORT0, PORT1 interrupts */
        P0->ISRC = P0->ISRC;
        P1->ISRC = P1->ISRC;
        printf("Un-expected interrupts.\n");
    }
}

/**
* @brief       Port2/Port3/Port4 IRQ
*
* @param       None
*
* @return      None
*
* @details     The Port2/Port3/Port4 default IRQ, declared in startup_M051Series.s.
*/
void GPIOP2P3P4_IRQHandler(void)
{
    /* To check if P4.5 interrupt occurred */
    if(GPIO_GET_INT_FLAG(P4, BIT5))
    {
        GPIO_CLR_INT_FLAG(P4, BIT5);
        printf("P4.5 INT occurred.\n");
    }
    else
    {
        /* Un-expected interrupt. Just clear all PORT2, PORT3 and PORT4 interrupts */
        P2->ISRC = P2->ISRC;
        P3->ISRC = P3->ISRC;
        P4->ISRC = P4->ISRC;
        printf("Un-expected interrupts.\n");
    }
}

使用特权

评论回复
43
gaoyang9992006| | 2015-1-13 22:46 | 只看该作者
/* To check if P1.3 interrupt occurred */
第一部分,检查1.3管脚中断是否发生,如果发生,则执行后面对应的指令。(清楚中断标志位,打印该端口发生中断的信息)
第二部分,中断没有发生,     /* Un-expected interrupt. Just clear all PORT0, PORT1 interrupts */
没有发生预期的中断事件,则清楚所有的PORT0.PORT1的中断。
另外我们看到一个有趣的事情: P0->ISRC = P0->ISRC;
该指令读取对应的Interrupt Source Flag(ISRC)中断源标志位,然后重写。其实就是没有中断发生,该标志位为0,读出来还写回去,相当于什么都没干。:lol本人这么理解肯定不太对。求高手分析。
最后打印出来没有发生该位置中断的信息。

使用特权

评论回复
44
mintspring|  楼主 | 2015-1-18 13:31 | 只看该作者
gaoyang9992006 发表于 2015-1-13 22:46
/* To check if P1.3 interrupt occurred */
第一部分,检查1.3管脚中断是否发生,如果发生,则执行后面对 ...

讲解的很到位,Interrupt Source Flag(ISRC)中断源标志位,这个意思不理解真会糊涂的

使用特权

评论回复
45
mintspring|  楼主 | 2015-1-18 13:32 | 只看该作者
gaoyang9992006 发表于 2015-1-13 22:36
下面给出一个应用例子。
/*--------------------------------------------------------------------------- ...

嵌套向量中断控制器:Nested Vectored Interrupt Controller (NVIC)
以前不懂这个意思,谢谢,看来手册要认真看才行。

使用特权

评论回复
46
zxf0168| | 2015-1-22 14:15 | 只看该作者
gaoyang9992006 发表于 2015-1-13 21:44

你从哪里复制粘贴来的?

使用特权

评论回复
47
zxf0168| | 2015-1-22 14:16 | 只看该作者
gaoyang9992006 发表于 2015-1-13 21:48
咱们来总结一下,IO口可以通过库函数设置哪些模式:

4种 I/O 模式:

复制粘贴来的东西:funk:

使用特权

评论回复
48
gaoyang9992006| | 2015-1-22 14:16 | 只看该作者
zxf0168 发表于 2015-1-22 14:15
你从哪里复制粘贴来的?

复制的库函数,我加以讲解,IAR里面的。

使用特权

评论回复
49
zxf0168| | 2015-1-22 14:17 | 只看该作者
gaoyang9992006 发表于 2015-1-13 22:20
中断类型共五种,对应上面的:
低电平触发,高电平触发,
下降沿触发,上升沿触发,上升和下降沿触发。 ...

最基础的东西:L

使用特权

评论回复
50
gaoyang9992006| | 2015-1-22 14:17 | 只看该作者
zxf0168 发表于 2015-1-22 14:16
复制粘贴来的东西

不是的,我自己敲上去的,你个傻鸟看清楚了,那可是汉字,原版的就是英文版库函数.h文件。我复制一段,讲解一段

使用特权

评论回复
51
gaoyang9992006| | 2015-1-22 14:18 | 只看该作者
zxf0168 发表于 2015-1-22 14:17
最基础的东西

你会吗?

使用特权

评论回复
52
zxf0168| | 2015-1-23 09:45 | 只看该作者
gaoyang9992006 发表于 2015-1-22 14:18
你会吗?

最基础的东西,我不会

使用特权

评论回复
53
gaoyang9992006| | 2015-1-23 19:16 | 只看该作者
zxf0168 发表于 2015-1-23 09:45
最基础的东西,我不会

你这,气人。

使用特权

评论回复
54
mintspring|  楼主 | 2015-1-27 00:06 | 只看该作者
好多缩写要看手册

使用特权

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

本版积分规则