⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 target.c

📁 汽车测功机源肛码.单片机用的是LPC2104. 实现测速,对涡流机的控制,马达的控制.
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************Copyright (c)**************************************************
**                               广州周立功单片机发展有限公司
**                                     研    究    所
**                                        产品一部 
**
**                                 http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: target.c
**创   建   人: 陈明计
**最后修改日期: 2004年2月2日
**描        述: lpc21xx(飞利浦的ARM)目标板特殊的代码,包括异常处理程序和目标板初始化程序
**              每个工程应当具有这个文件的拷贝,用户根据程序的需要修改本文件。
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 陈明计
** 版  本: v1.0
** 日 期: 2004年2月2日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
** 修改人:
** 版  本:
** 日 期:
** 描 述:
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#define IN_TARGET
#include "..\CGJ.H"
#include "..\i2c.h" 
#include "..\control.h"
#include "..\IGBT.h"

#define RV_ENABLE   0x01                                // 接收中断使能值
#define TX_ENABLE   0x02                                // 发送中断使能值

#define T1CR0_INTERRUPT 0x10                            // 捕获通道0中断标志位                  
#define T1CR1_INTERRUPT 0x20                            // 捕获通道1中断标志位
#define T1MR0_INTERRUPT 0x01                            // 匹配通道0中断标志位
#define T1MR1_INTERRUPT 0x02                            // 匹配通道1中断标志位
#define T1MR2_INTERRUPT 0x04                            // 匹配通道2中断标志位
#define PWM0_INTERRUPT  0x01                            // PWM匹配通道0的中断标志
#define PWM1_INTERRUPT  0x02                            // PWM匹配通道1的中断标志


/*********************************************************************************************************
** 函数名称: IRQ_Exception
** 功能描述: 中断异常处理程序,用户根据需要自己改变程序
**
** 输 入: 无
**
** 输 出: 无
**         
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 陈明计
** 日 期: 2004年2月2日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void IRQ_Exception(void)
{
    while(1);                   // 这一句替换为自己的代码
}

/*********************************************************************************************************
** 函数名称: FIQ_Exception
** 功能描述: 快速中断异常处理程序,用户根据需要自己改变程序
**           
** 输 入: 无
**
** 输 出: 无
**         
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 陈明计
** 日 期: 2004年2月2日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void FIQ_Exception(void)
{
    while(1);
}

/*********************************************************************************************************
** 函数名称: Timer0_Exception
** 功能描述: 定时器0中断服务程序
** 输 入: 无
**
** 输 出: 无
**         
** 全局变量: 无
** 调用模块: OSTimeTick
**
** 作 者: 陈明计
** 日 期: 2004年2月2日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Timer0_Exception(void)
{
    T0IR = 0x01;
    VICVectAddr = 0;            // 通知中断控制器中断结束
    OSTimeTick();
}

/*********************************************************************************************************
** 函数名称: Timer1_Exception
** 功能描述: 定时器1中断服务程序
** 输 入: 无
**
** 输 出: 无
**         
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 饶阳胜
** 日 期: 2005年5月25日
**-------------------------------------------------------------------------------------------------------
** 修改人: 饶阳胜
** 日 期: 05-6-19
** 修改原因: 依据不同的中断源,做不同的处理
** 说  明: 有1个中断源:
**                      1 速度脉冲输入捕获中断T1CR0
** 
**------------------------------------------------------------------------------------------------------
** 修 改 人:周川福
** 日    期:2006-04-01
** 修改原因:改成IGBT方式控制涡流机输出
**------------------------------------------------------------------------------------------------------
** 修 改 人:周川福
** 日    期:2006-4-19
** 修改原因:Timer1只用来计速度信号,IGBT如果使用Timer1产生触发信号会有中断丢失的现象,因为速度捕获中断
**           太频繁
********************************************************************************************************/
void Timer1_Exception(void)
{
    INT32U zc_t1cr0;                                    // 这次t1cr0的值
    INT32U i;
     
    i = T1IR;                                           // 获取中断源
    if(i & T1CR0_INTERRUPT){                            // 是捕获通道0中断,速度脉冲信号
        ++mcs;                                          // 对速度脉冲信号加1
        zc_t1cr0 = T1CR0;                               // 获取T1CR0值
        if(zc_t1cr0 > sc_t1cr0){                        // 计算上次脉冲周期
            mczq += zc_t1cr0 - sc_t1cr0;
        }else{
            mczq += (0xFFFFFFFF - sc_t1cr0) + zc_t1cr0;
        }
        sc_t1cr0 = zc_t1cr0;                            // 刷新上次匹配值
                
        T1IR     = T1CR0_INTERRUPT;                     // 清除中断标识符
    }
    
    
    VICVectAddr  = 0;                                   // 中断退出
}

/*********************************************************************************************************
** 函数名称: PWM_Exception()
** 功能描述: PWM匹配中断处理函数,用来产生触发IGBT的控制信号
**           
** 输 入  : 无
** 输 出  : 无
** 全局变量: 无
** 调用模块: IGBT_MR0_Handler()
**           IGBT_MR1_Handler()
** 作 者: 周川福
** 日 期: 2006-4-19
**-------------------------------------------------------------------------------------------------------
** 修 改: 
** 日 期: 
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void PWM_Exception(void)
{
    uint32  IntFlag;

    IntFlag = PWMIR;                                // 读取中断标志

    // PWM匹配中断PWMMR0,IGBT控制周期
    if(IntFlag & PWM0_INTERRUPT){                   // 匹配中断

        IGBT_MR0_Handler();
        PWMIR = PWM0_INTERRUPT;                     // 清除中断标识符
    }
    // PWM匹配中断PWMMR1,IGBT导通时间
    else if(IntFlag & PWM1_INTERRUPT){
       
        IGBT_MR1_Handler();
        PWMIR = PWM1_INTERRUPT;                     // 清除中断标识符
    }

    VICVectAddr = 0;                                // 通知中断控制器中断结束
}

/*********************************************************************************************************
** 函数名称: Uart0_Exception
** 功能描述: 串口发送中断处理程序
** 输 入:   无
**
** 输 出:   无 
**         
** 全局变量: 无
** 调用模块: 
**
** 作 者:   饶阳胜
** 日 期:   2005-5-26
**-------------------------------------------------------------------------------------------------------
** 修改人:   饶阳胜
** 日 期:   05-6-10
** 修改原因: 增加接收处理
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/********************************************************************************************************
** 修改人:   饶阳胜
* 日 期:    05-6-11
* 修改原因:  按ESSB的要求改写
********************************************************************************************************/
void Uart0_Exception(void)
{
    INT8U err, c;
    
    switch(U0IIR & 0x0F){
        case 0x02:                                  // 是数据发送完成中断
            c = CommGetTxChar(COMM1, &err);         // 调用取发送缓冲区数函数
            if(err != COMM_TX_EMPTY && err != COMM_BAD_CH){             
                U0THR = c;                          // 发送缓冲区中有数,将数送到发送寄存器
            }else{
                U0IER &= ~TX_ENABLE;                // 发送缓冲区为空,关闭发送中断
            }                       
            break;

        case 0x04:                                  // 是数据接收中断
            c = U0RBR;                              // 读取接收到的数据             
            CommPutRxChar(COMM1,c);                 // 将数据插到接收缓冲区中
            break;

        default:
            break;
    }       

    VICVectAddr = 0;                                // 通知中断控制器中断结束   
}

/*********************************************************************************************************
** 函数名称: Timer0Init
** 功能描述: 定时器0初始化
** 输 入: 无
**
** 输 出: 无
**         
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 陈明计
** 日 期: 2002年4月4日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Timer0Init(void)
{
    T0IR = 0xFFFFFFFF;
    T0TC = 0;
    T0TCR = 0x01;
    T0MCR = 0x03;
    T0MR0 = (Fpclk / OS_TICKS_PER_SEC);
 }

/*********************************************************************************************************
** 函数名称: Timer1Init
** 功能描述: 定时器1初始化
** 输 入: 无
**
** 输 出: 无
**         
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 饶阳胜
** 日 期: 2005年5月22日
**-------------------------------------------------------------------------------------------------------
** 修改人: 饶阳胜
** 日 期: 05-6-19
** 说  明: 利用TMR1做3件事:
**                          1 捕获通道0抓取速度脉冲信号,用于计算速度
**                          2 捕获通道1抓取市电50Hz的周期信号,用于计算控制输出周期
**                          3 匹配通道0,用于控制输出脉冲的宽度
**                          4 但在初始化时,只打开第一项,用于测速度
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Timer1Init(void)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -