mdq123 发表于 2012-4-21 17:09:26

在学习EASYARM2103时候遇到关于定时器的问题

本帖最后由 mdq123 于 2012-4-21 17:34 编辑

#include "config.h"

uint8 find = 2;
uint32 commentyin = {0x03f0,0x060, 0x05b0, 0x04f0, 0x0660, 0x06d0, 0x07d0, 0x0270, 0x07f0, 0x06f0};

#define led 1<<17

void delay(uint32 n);

//void init_zhongduan();


void init_IO()
{
        PINSEL0 = 0X0000;
        IODIR = 0XffFF0;
        IOCLR = 0XffFF0;
}

void__irq Timer0ISR (void)
{

    find++;
    if(find == 10)
    {
            find = 0;
    }
   
    init_IO();
                                                   
    T0IR = 0x01;                                                      /*清除中断标志                */
    VICVectAddr = 0x00;                                                 /*中断向量结束                */
}

/*********************************************************************************************************
** Function name:       Timer0Init
** Descriptions:      定时器0初始化
** input parameters:    无
** ouput parameters:    无
** Returned value:      无
*********************************************************************************************************/
voidTimer0Init(void)
{       
    T0TCR= 0x02;                                                      /*定时器0复位               */
    T0PR   = 0;                                                                                        /*不设时钟分频                */
    T0MCR= 0x03;                                                                                /*匹配后复位TC,并产生中断    */
    T0MR0= Fpclk;                                                 /*设置0.5秒匹配值             */
    T0IR   = 0x01;                                                      /*清除中断标志                */
    T0TCR= 0x01;                                                                                /*启动定时器0               */
}

void init_zhongduan()
{
        IRQEnable();
    VICIntSelect = VICIntSelect & (~(1 << 4));                                /*定时器0分配为IRQ中断      */
    VICVectCntl0 = 0x20 | 4;                                                          /*定时器0分配为向量IRQ通道0   */
    VICVectAddr0 = (uint32) Timer0ISR;                                          /*分配中断服务程序地址      */
    VICIntEnable = 1 << 4;                                                                /*定时器0中断使能             */
}


int main (void)
{// add user source code
       

        init_IO();
        Timer0Init();
        init_zhongduan();
       
       
        while(1)
        {               
                //init_IO();
                IOSET = commentyin;
                //IO0SET = commentyin;
                //delay(300);       
        }
    return 0;
}

void delay(uint32 n)
{
        uint32 i;
        for(;n>0;n--)
        {
                for(i = 0;i<100;i++)
                {
                }
        }
}
出定时中断之后,find的值变了,但是在硬件失误上显示不正常
页: [1]
查看完整版本: 在学习EASYARM2103时候遇到关于定时器的问题