查看: 563|回复: 0
打印 上一主题 下一主题

MAPS试用

[复制链接] qrcode

30

主题

33

帖子

100

积分

注册会员

Rank: 2

积分
100
楼主
跳转到指定楼层
发表于 2016-5-17 08:40 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人习惯学习开发板的时候,首先打开周期定时器,而M4的pit和arm自带的滴答时钟挺好用,于是今天就把尝试了一下。打开pit时,        调用了PIT_DRV_Init(0,1)和PIT_DRV_InitChannel(0,0,&pitConfig),并打开了pit中断,NVIC_EnableIRQ(PIT0_IRQn)和系统总中断INT_SYS_EnableIRQGlobal();然并卵,pit定时器并没有工作,查看相关寄存器,最后发现pit使能中断位没有置位,进入函数PIT_DRV_InitChannel(0,0,&pitConfig),发现此函数没有使能中断位。于是在pit初始化里加入PIT_DRV_StartTimer(0,0),pit果然启动。
pit实现一个计数器每10ms增加1,在主循环里实现led4周期为2s的闪烁。如下:

int main()
{
        gpio_output_pin_user_config_t led;
        gpio_output_pin_t led_config;
       
        led_config.outputLogic = 1;
        led_config.driveStrength = 0;
        led_config.slewRate = 0;
        led_config.isOpenDrainEnabled = 1;
       
        led.pinName = kGpioLED4;
        led.config = led_config;

        GPIO_DRV_OutputPinInit(&led);

        INT_SYS_DisableIRQGlobal();

        SysTick_Config(SystemCoreClock/1000000*10000);//滴答时钟
       
        NVIC_DisableIRQ(PIT0_IRQn);
        pit_user_config_t pitConfig;
        pitConfig.isInterruptEnabled =1;
        pitConfig.isTimerChained =0;
        pitConfig.periodUs =10000;
        PIT_DRV_Init(0,1);
        PIT_DRV_InitChannel(0,0,&pitConfig);
       
        PIT_DRV_StartTimer(0,0);
        NVIC_SetPriorityGrouping(5);
        NVIC_SetPriority(PIT0_IRQn,3);
        NVIC_EnableIRQ(PIT0_IRQn);
       
        INT_SYS_EnableIRQGlobal();
        while(1)
        {
                if((cnt<=100))
                {
                        GPIO_DRV_ClearPinOutput(led.pinName);
                }
                else if(cnt<=200)
                {
                        GPIO_DRV_SetPinOutput(led.pinName);
                }
                else
                {
                        cnt = 0;
                }
        }
        return 0;
}


pit中断处理函数:
void PIT0_IRQHandler(void)
{
        extern int cnt;
        PIT_TFLG(0) =1;
        cnt ++;
}




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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