打印
[ZLG-ARM]

如何使我的T0在我想要的时候启动?

[复制链接]
1119|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
teltium|  楼主 | 2007-9-7 09:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
tc, ST, TI, os, se
/*
****************************************************
** 865芯片初始化函数
****************************************************
*/
void init_cmx865(void)
    {
        generalreset();
        wr2(GENERALCONTROL, POWERUP); //write 1s to Pwrup & Reset bits
        T0TCR = 0x03;            // 启动并复位T0TC
        T0TCR  = 0x01;          //启动定时器    turn on uC Timer0 for 50ms delay
        while(pwrupdelay!=1); //wait for xtal osc to stabilize
        T0TCR = 0x03;            // 启动并复位T0TC
        T0TCR  = 0x00;           //turn off uC Timer0
    }

无法进入中断  不解啊

相关帖子

沙发
teltium|  楼主 | 2007-9-7 09:45 | 只看该作者

初始化和中断处理

/*
*********************************************************************************************************
** 函数名称 :IRQ_Timer0()
** 函数功能 :定时器0中断服务程序。
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void __irq IRQ_Timer0 (void)
{
    uart0_flag=1;
    pwrupdelay=1;
    T0IR = 0x01;                /* 清除中断标志                                    */    
    VICVectAddr = 0x00;            /* 通知VIC中断处理结束                            */
}

/*
*********************************************************************************************************
** 函数名称 :Timer0_Init()
** 函数功能 :定时器0初始化。
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void Timer0_Init (void)
{
    /* 定时器0初始化 */
    T0TC   = 0;            /* 定时器设置为0                                        */
    T0PR   = 0;            /* 时钟不分频                                            */
    T0MCR  = 0x03;        /* 设置T0MR0匹配后复位T0TC,并产生中断标志                */
    T0MR0  = Fpclk/20 ;    /* 50ms秒钟定时                                            */
    //T0TCR = 0x03;            // 启动并复位T0TC
    //T0TCR  = 0x01;        /* 启动定时器                                            */
    
    /* 设置定时器0中断IRQ */
    VICIntSelect = 0x00;                /* 所有中断通道设置为IRQ中断            */
    VICVectCntl1 = 0x20 | 0x04;            /* 设置定时器1中断通道分配最高优先级    */
    VICVectAddr1 = (uint32)IRQ_Timer0;    /* 设置中断服务程序地址                    */
    VICIntEnable = 1 << 0x04;            /* 使能定时器0中断                        */

}

使用特权

评论回复
板凳
teltium|  楼主 | 2007-9-7 12:49 | 只看该作者

死在这里了while(pwrupdelay!=1);

使用特权

评论回复
地板
teltium|  楼主 | 2007-9-7 13:06 | 只看该作者

问题解决了 方法如下

改startup.s中
IRQEnable
       MSR   R0, SPSR
       BIC   R0, R0, #0X80
       MSR   SPSR_c, R0
       MOVS  PC, LR

使用特权

评论回复
5
teltium|  楼主 | 2007-9-7 16:46 | 只看该作者

volatile uint8 uart0_flag;

定义成volatile可靠

使用特权

评论回复
6
teltium|  楼主 | 2007-9-7 17:02 | 只看该作者

删帖

本帖最后由 teltium 于 2017-11-11 13:58 编辑

删帖

使用特权

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

本版积分规则

21

主题

406

帖子

3

粉丝