智能车制作

标题: MCF52259芯片程序求解。。。。 [打印本页]

作者: 半夏_夜溦凉丶    时间: 2014-12-4 22:01
标题: MCF52259芯片程序求解。。。。
#include "led.h"
#include "pit.h"
int main(void)
{
        int counter = 0;
        uint8 i=0;
       
#if (CONSOLE_IO_SUPPORT || ENABLE_UART_SUPPORT)
        printf("Hello World in C from MCF52259 derivative on MCF52259 board\n\r");
        fflush(stdout);
#endif
        led_init();
        pit_init(0);
        for(;;) {          
                   counter++;
                  switch(i)
                  {
                          case 0:
                          led_on(1);
                          delay_s(80000,0,1);
                          i++;
                        break;
                       
                          case 1:
                          led_on(2);
                          delay_s(80000,0,1);
                        i++;
                        break;
                       
                          case 2:
                          led_on(3);
                          delay_s(80000,0,1);
                          i++;
                          break;
                         
                          case 3:
                          led_on(4);
                          delay_s(80000,0,1);
                          i++;
                          break;
                         
                          case 4:
                          led_off(4);
                          delay_s(80000,0,1);
                        i++;
                        break;
                       
                          case 5:
                          led_off(3);
                          delay_s(80000,0,1);
                          i++;
                          break;
                         
                          case 6:
                          led_off(2);
                          delay_s(80000,0,1);
                          i++;
                          break;
                         
                          case 7:
                          led_off(1);
                          delay_s(80000,0,1);
                          i=0;
                          break;
                         
                          default:
                          break;
                         
                  }
        }
}
这是主函数。。。。下面是主函数中调用的函数

void stop_pit(uint8 channel)
{
        MCF_PIT_PCSR(channel)&=~MCF_PIT_PCSR_EN;       
}


void delay_s(uint32 sysClkKhz,uint8 channel, uint8 s)
{
        MCF_PIT_PMR(channel)=1000*s*sysClkKhz/2/16384-5;
        start_pit(channel);
        while(        (MCF_PIT_PCSR(channel)&MCF_PIT_PCSR_PIF)==0);
        MCF_PIT_PCSR(channel)|=MCF_PIT_PCSR_PIF;
        stop_pit(channel);
}


这个调用函数我将 MCF_PIT_PMR(channel)=1000*s*sysClkKhz/2/16384-5; 这一行的1000去掉,怎么LED灯亮的时间间隔不变,而且我注释掉 MCF_PIT_PCSR(channel)|=MCF_PIT_PCSR_PIF;  stop_pit(channel);这两行,对程序没什么影响。。。求解。。。新手第一次发帖求助。。。。


作者: donllen    时间: 2015-1-2 21:09
本帖最后由 donllen 于 2015-1-2 21:12 编辑

还是先弄明白这几个寄存器的作用 PMR是你想要累加到几 (原谅我不会表达),PCNTR累加到PMR会清零重新开始,PCSR是分频控制位 中断标志位寄存器。你注释掉的代码那个PCSR寄存器设置我想可能在你的 pit_init函数中已经有了定义。 至于其他的问题 明白寄存器的意思就很容易理解了。





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2