?? tbm_isr.c
字號:
/*******************************************************************************
* (c) Freescale Inc. 2004 all rights reserved. *
* *
* *
* Door lock solenoid application based on MC68HC908GR16 slave program. *
* ===================================================================== *
* *
* $File Name : tbm_isr.c$ *
* $Author : re004c$ *
* $Date : Jul-14-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 l_u8 messages[4];
extern l_u8 active_nodes[4];
extern unsigned char messages_counter;
/*******************************************************************************
* *
* Function name: tbm_handler *
* Function: Handle TBM ISR, Add one tick to time *
* *
*******************************************************************************/
#pragma TRAP_PROC
interrupt 17 void tbm_handler(void)
{
unsigned char status_display, k = 0;
asm
{
sei; /* disable interupt */
}
TBCR_TACK = 1; /* clear tbm interupt flag */
if (messages[messages_counter-1]) /* message buffer not empty? */
{
/* mask high nibl */
status_display = messages[messages_counter-1] & 0x0F;
status_display += (0x01 << (messages_counter + 3)); /* add node index */
PTF = ~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++;
}
}
TBCR_TBON = 1; /* enable TBM */
asm
{
cli; /* enable interupt */
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -