亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? freemaster_hc12.c

?? BCM 控制demo源代碼
?? C
字號:
/******************************************************************************
*
* Freescale Semiconductor Inc.
* (c) Copyright 2004-2005 Freescale Semiconductor, Inc.
* (c) Copyright 2001-2004 Motorola, Inc.
* ALL RIGHTS RESERVED.
*
****************************************************************************//*!
*
* @file   freemaster_HC12.c
*
* @brief  FreeMASTER Driver 56F800E-hardware dependent stuff
*
* @version 1.0.1.0
* 
* @date Oct-12-2006
* 
*******************************************************************************/

#include "freemaster.h"
#include "freemaster_private.h"
#include "freemaster_HC12.h"

/*******************************************************************************
*
* @brief 	API: Main SCI Interrupt handler call
*
* This Interrupt Service Routine handles the SCI interrupts for the FreeMASTER 
* driver. In case you want to handle the interrupt in the application yourselves,
* call the FMSTR_ProcessSCI function which does the same job but is not compiled
* as an Interrupt Service Routine.
*
* In poll-driven mode (FMSTR_POLL_DRIVEN) this function does nothing.
*
*******************************************************************************/

#ifdef __HCS12X__
extern volatile __near Byte _GPAGE;
extern volatile __near Byte _PPAGE;
#endif

// HC12 interrupt routine declaration, must be in non-paged code memory
#include "non_bank.sgm"
#ifdef FMSTR_SCI_INTERRUPT
// user may define interrupt number in the configuration
interrupt FMSTR_SCI_INTERRUPT
#else
// or may want to use the PRM file to set the vector to FMSTR_Isr
#pragma TRAP_PROC
#endif

void FMSTR_Isr(void)
{
#ifdef __HCS12X__
    asm LDAA _GPAGE
    asm PSHA  
    asm LDAA _PPAGE
    asm PSHA  
#endif

#if FMSTR_LONG_INTR || FMSTR_SHORT_INTR

  	// process serial interface
#if FMSTR_USE_SCI
	FMSTR_ProcessSCI(); 
#endif
	
#endif

#ifdef __HCS12X__
    asm PULA  
    asm STAA  _PPAGE
    asm PULA  
    asm STAA  _GPAGE
#endif
}

// restore HC12 code segment
#if defined(FMSTR_PLATFORM_HC12)
	#include "default.sgm"
#endif

/**************************************************************************//*!
*
* @brief 	The "memcpy" used internally in PC Master driver
*
* @param  	nDestAddr - destination memory address
* @param  	nSrcAddr  - source memory address
* @param  	nSize     - memory size (always in bytes)
*
******************************************************************************/

void FMSTR_CopyMemory(FMSTR_ADDR nDestAddr, FMSTR_ADDR nSrcAddr, FMSTR_SIZE8 nSize)
{
	FMSTR_U8* ps = (FMSTR_U8*) nSrcAddr;
	FMSTR_U8* pd = (FMSTR_U8*) nDestAddr;
	
	while(nSize--)
		*pd++ = *ps++;
}

/**************************************************************************//*!
*
* @brief  Write-into the communication buffer memory
*
* @param  pDestBuff - pointer to destination memory in communication buffer
* @param  nSrcAddr  - source memory address
* @param  nSize     - buffer size (always in bytes)
*
* @return This function returns a pointer to next byte in comm. buffer
*
******************************************************************************/

FMSTR_BPTR FMSTR_CopyToBuffer(FMSTR_BPTR pDestBuff, FMSTR_ADDR nSrcAddr, FMSTR_SIZE8 nSize)
{
	FMSTR_U8* ps = (FMSTR_U8*) nSrcAddr;
	FMSTR_U8* pd = (FMSTR_U8*) pDestBuff;
	
	while(nSize--)
		*pd++ = *ps++;
		
	return (FMSTR_BPTR) pd;
}

/**************************************************************************//*!
*
* @brief  Read-out memory from communication buffer
*
* @param  nDestAddr - destination memory address
* @param  pSrcBuff  - pointer to source memory in communication buffer
* @param  nSize     - buffer size (always in bytes)
*
* @return This function returns a pointer to next byte in comm. buffer
*
******************************************************************************/

FMSTR_BPTR FMSTR_CopyFromBuffer(FMSTR_ADDR nDestAddr, FMSTR_BPTR pSrcBuff, FMSTR_SIZE8 nSize)
{
	FMSTR_U8* ps = (FMSTR_U8*) pSrcBuff;
	FMSTR_U8* pd = (FMSTR_U8*) nDestAddr;
	
	while(nSize--)
		*pd++ = *ps++;
		
	return (FMSTR_BPTR) ps;
}


/**************************************************************************//*!
*
* @brief  Read-out memory from communication buffer, perform AND-masking
*
* @param  nDestAddr - destination memory address
* @param  pSrcBuff  - source memory in communication buffer, mask follows data
* @param  nSize     - buffer size (always in bytes)
*
******************************************************************************/

void FMSTR_CopyFromBufferWithMask(FMSTR_ADDR nDestAddr, FMSTR_BPTR pSrcBuff, FMSTR_SIZE8 nSize)
{
	FMSTR_U8* ps = (FMSTR_U8*) pSrcBuff;
	FMSTR_U8* pd = (FMSTR_U8*) nDestAddr;
	FMSTR_U8 mask, stmp, dtmp;
	
	while(nSize--) 
	{
		mask = ps[nSize];
		stmp = *ps++;
		dtmp = *pd;
		
		// perform AND-masking
		stmp = (stmp & mask) | (dtmp & ~mask);

		// put the result back		
		*pd++ = stmp;
	}
}

/******************************************************************************/

// S12X LARGE model special handling (FMSTR_ADDR is __far pointer, global address)
#if defined(__HCS12X__) && FMSTR_LARGE_MODEL

// mixed EX and no-EX commands?
#if FMSTR_USE_EX_CMDS && FMSTR_USE_NOEX_CMDS

/**************************************************************************//*!
*
* @brief  When mixed EX and no-EX command may occur, this variable is
*         here to remember what command is just being handled.
*
******************************************************************************/

static FMSTR_BOOL pcm_bNextAddrIsEx;

void FMSTR_SetExAddr(FMSTR_BOOL bNextAddrIsEx)
{
    pcm_bNextAddrIsEx = bNextAddrIsEx;
}

#else // only no-EX commands (we are in LARGE model)

/**************************************************************************//*!
*
* @brief  When mixed EX and no-EX commands are disabled, we are sure
*         only the EX are used (we are in LARGE mode here).
*
******************************************************************************/

static const FMSTR_BOOL pcm_bNextAddrIsEx = 1;

#endif // mixed EX and no-EX commands

/**************************************************************************//*!
*
* @brief  Store (global) address to communication buffer
*
******************************************************************************/

FMSTR_BPTR FMSTR_AddressToBuffer(FMSTR_BPTR pDest, FMSTR_ADDR nAddr)
{
    if(pcm_bNextAddrIsEx)
    {
        // fill in the 24bit (global) address, right-align in 32bit destination
        *(FMSTR_U32*) pDest = ((FMSTR_U32)nAddr);
        pDest += 4;
    }
    else
    {
        // this should never happen, the result address would be invalid
        asm BGND;
        
        // use NULL address rather than invalid one
        *(FMSTR_U16*) pDest = 0;
        pDest += 2; 
    }
    
    return pDest;
}

/**************************************************************************//*!
*
* @brief  Test if given numeric (LWord) address is global one
*
* Although not really general approach, this condition works on all current 
* S12X devices. In fact, this will work until the valid PPAGE and RPAGE values
* will be 0x80 or higher. On current devices, the PPAGE and RPAGE values start
* on 0xFF go down depending on the ammount of available memory.
*
* Non-global address is either near (16bit only) or or logical (24bit page+offs, 
* Bit23 set (no device uses page 7f or less). The conversion of both such formats 
* to a global format is handled by CodeWarrior library function 
* _CONV_LOGICAL_TO_GLOBAL function.
*
* For us now, it is okay to assume the global adddress is the one with 
* non-zero page (GPAGE) while having Bit23 cleared.
*
******************************************************************************/

#define FMSTR_IsGlobalAddress(addr) \
    (((addr) & 0xff0000L) && !((addr) & 0x800000L))
    
/**************************************************************************//*!
*
* @brief  CodeWarrior logical-to-global translation function 
*
* FMSTR_ADDR is defined as void*__far which is passed in B:X as
* the library function expects it. The function is NEAR so JSR is used
*
******************************************************************************/

FMSTR_ADDR NEAR _CONV_LOGICAL_TO_GLOBAL(FMSTR_ADDR);

/**************************************************************************//*!
*
* @brief  Fetch address from communication buffer
*
******************************************************************************/

FMSTR_BPTR FMSTR_AddressFromBuffer(FMSTR_ADDR* pAddr, FMSTR_BPTR pSrc)
{
    // treat address as long word to determine the kind of the address
    LWord addr = 0;
    
    if(pcm_bNextAddrIsEx)
    {
        addr = *((LWord*) pSrc);
        pSrc += 4;
    }
    else
    {
        addr = *((Word*) pSrc);
        pSrc += 2;
    }

    if(FMSTR_IsGlobalAddress(addr))
    {
        *pAddr = (FMSTR_ADDR) (void*__far) (addr & 0xffffff);
    }
    else
    {
        *pAddr = (FMSTR_ADDR) _CONV_LOGICAL_TO_GLOBAL((FMSTR_ADDR)addr);
    }
    
    return pSrc;
}

/**************************************************************************//*!
*
* @brief  Check if the address is in logical form (page+offs) and convert
*         it to global address
*
******************************************************************************/

FMSTR_ADDR FMSTR_FixHcs12xAddr(FMSTR_ADDR nAddr)
{
    LWord addr = (LWord) nAddr;
    
    if(!(addr & 0xff0000L) || (addr & 0x800000L))
    {
        FMSTR_ADDR NEAR _CONV_LOGICAL_TO_GLOBAL(FMSTR_ADDR);
        return _CONV_LOGICAL_TO_GLOBAL(nAddr);
    }
}

#endif // S12X FMSTR_LARGE_MODEL

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久国产精品午夜一区ai换脸| 日本不卡视频在线| 成人免费在线观看入口| 午夜精品福利久久久| 欧美体内she精高潮| 国产精品成人在线观看| 国产一区二区三区在线观看免费| 欧美三级三级三级爽爽爽| 亚洲理论在线观看| 色综合一区二区| 亚洲日本中文字幕区| 91成人免费在线| 亚洲综合色视频| 欧美一级欧美三级| 国产一本一道久久香蕉| 久久午夜电影网| 国产成人午夜视频| 欧美精品亚洲一区二区在线播放| 亚洲人成在线观看一区二区| 成人一区二区三区视频在线观看| 国产视频一区在线播放| 处破女av一区二区| 精品理论电影在线观看 | 国产精品亚洲а∨天堂免在线| 精品一区二区三区影院在线午夜| 欧美高清精品3d| 韩国女主播成人在线观看| 欧美国产激情一区二区三区蜜月| 播五月开心婷婷综合| 亚洲网友自拍偷拍| 91精品国产综合久久精品图片 | 日韩精品三区四区| 制服丝袜亚洲色图| 久久99国产精品免费| 国产精品国产三级国产有无不卡| 91免费看`日韩一区二区| 久久久影院官网| 日本高清免费不卡视频| 亚洲午夜久久久久久久久久久| 欧美综合视频在线观看| 国产一区中文字幕| 日韩成人精品在线观看| 久久综合色一综合色88| 91久久精品一区二区| 免费精品视频最新在线| 久久精品一区二区| 欧美专区日韩专区| 国产精品 日产精品 欧美精品| 图片区小说区区亚洲影院| 久久久精品tv| 欧美成人精品二区三区99精品| 欧美日韩国产美| 欧美日韩亚洲丝袜制服| 不卡高清视频专区| 国产精品一区二区在线播放 | 中文字幕字幕中文在线中不卡视频| 色婷婷国产精品| 99九九99九九九视频精品| 成人性色生活片免费看爆迷你毛片| 蜜桃av噜噜一区| 免费在线一区观看| 国产真实乱子伦精品视频| 免费观看久久久4p| 国产精品一区二区在线播放| 国产一区二区精品在线观看| 国产精品正在播放| 丁香婷婷深情五月亚洲| 99久久99久久精品免费看蜜桃| 韩国成人福利片在线播放| 黄一区二区三区| 国产99精品国产| 欧美亚洲高清一区| 久久综合999| 综合婷婷亚洲小说| 激情成人午夜视频| 国产乱人伦偷精品视频免下载| 国产剧情在线观看一区二区| 91视频国产观看| 26uuu亚洲婷婷狠狠天堂| 亚洲天堂精品视频| 久久精品久久精品| 色系网站成人免费| 久久午夜电影网| 亚洲一区二区三区影院| 韩国精品久久久| 欧美mv日韩mv国产网站app| 亚洲精品一区二区三区99| 亚洲成av人综合在线观看| 色哟哟日韩精品| 日本一区二区三区电影| 午夜一区二区三区视频| 国产成人av电影在线| 在线成人高清不卡| 亚洲精品中文字幕乱码三区| 国产精品亚洲一区二区三区妖精 | 国产精品大尺度| 久久av中文字幕片| 欧美日韩精品福利| 视频一区欧美日韩| 欧美无砖砖区免费| 国产精品无遮挡| 91在线精品一区二区| 国产性天天综合网| 91麻豆免费看片| 国产精品电影一区二区三区| 不卡大黄网站免费看| 国产精品久久免费看| 欧美日韩五月天| 国内久久精品视频| 国产视频亚洲色图| 高潮精品一区videoshd| 国产欧美日韩麻豆91| 丁香亚洲综合激情啪啪综合| 中文一区二区在线观看| 成人动漫精品一区二区| 亚洲久草在线视频| 成人少妇影院yyyy| 亚洲一区二区av在线| 久久蜜桃香蕉精品一区二区三区| 极品少妇xxxx精品少妇| 国产女同性恋一区二区| 91麻豆福利精品推荐| 免费在线观看一区| 精品国精品自拍自在线| 色屁屁一区二区| 成人网在线免费视频| 亚洲综合色在线| 日韩精品一区二区三区在线播放 | 欧美一区二区三区男人的天堂 | 美国十次综合导航| 一区二区三区四区av| 日韩女优制服丝袜电影| 91国偷自产一区二区三区观看| 国产精品综合视频| 韩国理伦片一区二区三区在线播放 | 亚洲精品在线网站| 欧美猛男男办公室激情| 色噜噜狠狠一区二区三区果冻| 韩国女主播一区二区三区| 午夜精品影院在线观看| 亚洲一二三区在线观看| 久久久亚洲午夜电影| 欧美一区二区在线免费观看| 色拍拍在线精品视频8848| 在线视频国产一区| 欧美日本在线一区| 91精品国产综合久久精品麻豆| 欧美三级在线播放| 欧美午夜电影在线播放| 欧美精品在欧美一区二区少妇| 欧美日产国产精品| 日韩欧美国产1| 精品国产免费人成在线观看| 91精品视频网| 国产精品女主播在线观看| 国产精品丝袜一区| 亚洲综合一区二区| 久久精品国产99| 国产米奇在线777精品观看| 国产激情精品久久久第一区二区 | 亚洲最新视频在线观看| 亚洲午夜久久久久久久久久久| 日韩高清不卡在线| 国产二区国产一区在线观看| 国产福利一区在线观看| 99久久免费视频.com| 欧美中文字幕一二三区视频| 欧美精品一卡两卡| 国产欧美一区二区精品性| 亚洲国产一二三| 国产成人精品亚洲午夜麻豆| 色噜噜狠狠色综合中国| 精品美女一区二区| 久久精品亚洲乱码伦伦中文| 一区二区三区免费| 久久99国产精品麻豆| 欧美高清视频www夜色资源网| 国产精品丝袜一区| 成人av网址在线观看| 日韩欧美的一区二区| 香蕉久久一区二区不卡无毒影院 | 亚洲不卡av一区二区三区| 日韩影院精彩在线| 欧美午夜不卡在线观看免费| 久久天堂av综合合色蜜桃网| 亚洲一区二区四区蜜桃| 成人综合婷婷国产精品久久免费| 久久久蜜臀国产一区二区| 美国毛片一区二区| 久久夜色精品一区| 国产成人在线色| 国产清纯在线一区二区www| 蜜桃av一区二区在线观看| 欧美色区777第一页| 亚洲天堂成人网| 欧美视频中文字幕| 亚洲va韩国va欧美va精品| 欧美日韩国产a| 国内精品国产三级国产a久久| 中文字幕一区二区三区在线观看 |