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

📄 rti_isr.c

📁 MC9S12C32 LIN-BUS源码(编译环境:CodeWarriorV3.1)
💻 C
字号:
/*******************************************************************************
*                (c) Freescale Inc. 2004  all rights reserved.                 *
*                                                                              *
*                                                                              *
*     Door lock solenoid application based on MC68HC908GR16 slave program.     *
*     =====================================================================    *
*                                                                              *
*    $File Name     : rti_isr.c$                                               *
*    $Author        : re004c$                                                  *
*    $Date          : Jun-25-2004$                                             *
*    $Version       : 1.1.3.0$                                                 *
*    Function:                                                                 *
*                                                                              *
* ============================================================================ *
* THIS SOFTWARE IS PROVIDED BY FREESCALE SEMICONDUCTOR "AS IS" AND ANY         *
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED  *
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE       *
* DISCLAIMED.  IN NO EVENT SHALL FREESCALE SEMICONDUCTOR OR ITS CONTRIBUTORS   *
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR       *
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF         *
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS     *
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN      *
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)      *
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE   *
* POSSIBILITY OF SUCH DAMAGE.                                                  *
*******************************************************************************/


#include <lin.h>
#include "target.h"

extern unsigned char rti_count;
extern l_u8 active_nodes[4];
extern l_u8 messages[4];
extern unsigned char messages_counter;

/*******************************************************************************
*                                                                              *
*    Function name: rti_handler                                                *
*    Function:      Handle RTI ISR, Add one tick to time                       *
*                                                                              *
*******************************************************************************/

#pragma TRAP_PROC
void rti_handler(void)
{
    unsigned char status_display, k = 0;
    asm
    {
        sei;                                              /* disable interupt */
    }
    Crg.crgflg.bit.rtif = 1;                       /* clear rti interupt flag */
    if (!rti_count)
    {
        rti_count = 4;        
        if (active_nodes[messages_counter-1])                 /* node acitve? */
        {
                                                            /* mask high nibl */
            status_display = messages[messages_counter-1] & 0x0F;
                                                            /* add node index */
            status_display += (0x01 << (messages_counter + 3)); 
            PORTB = ~status_display;
        }
        while (k < 4)
        {
                                                  /* next non-zero node find? */
            if (active_nodes[(messages_counter + k)%4] != 0)
            {
                                                /* yes, memorize the position */
                messages_counter = ((messages_counter + k) % 4) + 1;
                k = 4;                                        /* end the loop */
            }
            else
            {
                k++;
            }
        }
    }    
    else
    {
        rti_count--;
    }

    asm
    {
        cli;                                               /* enable interupt */
    }
    Crg.rtictl.byte = RTI_DIVIDER;                        /* set new rti time */
}

⌨️ 快捷键说明

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