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

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

?? driver.c

?? 實現ARM9處理器的MMU的功能
?? C
字號:
//*----------------------------------------------------------------------------
//*         ATMEL Microcontroller Software Support  -  ROUSSET  -
//*----------------------------------------------------------------------------
//* The software is delivered "AS IS" without warranty or condition of any
//* kind, either express, implied or statutory. This includes without
//* limitation any warranty or condition with respect to merchantability or
//* fitness for any particular purpose, or against the infringements of
//* intellectual property rights of others.
//*----------------------------------------------------------------------------
//* File Name           : driver.c
//* Object              : USART driver in C
//* Creation            : ODi   07/11/2002
//*
//*----------------------------------------------------------------------------
#include "PRODUCT/AT91product.h"
#include "PRODUCT/lib_AT91product.h"
#include "SERVICE/SBUFFER/AT91_SVC_SBUFFER.h"
#include "SERVICE/TXUSART/AT91_SVC_TXUSART.h"

#ifndef AT91S_SVC_USDRIVER_H
#define AT91S_SVC_USDRIVER_H

typedef struct _AT91S_SVC_USDRIVER {
	// Public Method:
	// ==============
	// Write is invoked to store data in the buffer (return number of bytes written)
	int (*Write) (struct _AT91S_SVC_SBUFFER *, char *, unsigned int);
	// Pointer to driver handler function
	void (*DriverHandler) ();

	// Private data:
	// =============
	// AT91S_SVC_SBUFFER instance
	AT91S_SVC_SBUFFER svcBuffer;
	// AT91S_SVC_TXUSART instance
	AT91S_SVC_TXUSART svcTxUsart;
	char semaphore;
} AT91S_SVC_USDRIVER, *AT91PS_SVC_USDRIVER;

typedef int  (*AT91PF_SVC_USDRIVER_Write) (AT91PS_SVC_USDRIVER, char *, unsigned int);
typedef void (*AT91PF_SVC_USDRIVER_DriverHandler) ();


//* ====================================================================================

// This function is called by the application.
// Open SBUFFER service. Call with a buffer area pre-allocated to store data being written
extern AT91PS_SVC_USDRIVER AT91F_SVC_USDRIVER_Open(
	AT91PS_SVC_USDRIVER, // \arg pointer to an USDRIVER allocated
	AT91PS_USART,        // \arg pointer to USART arguments
	unsigned int,        // \arg USART id
	char *,              // \arg TX buffer size (MUST BE > 2 BYTES)
	unsigned int);       // \arg TX buffer size (MUST BE > 2 BYTES)

// Following functions are supposed to be invoked through services function pointer
extern int AT91F_SVC_USDRIVER_Write(
	AT91PS_SVC_USDRIVER, // \arg pointer to an USDRIVER allocated
	char *,              // \arg pointer on buffer to be sent
	unsigned int);       // \arg number of bytes to be written

// Driver handler
extern void AT91F_SVC_USDRIVER_DriverHandler();

#endif // AT91S_SVC_USDRIVER_H


//*----------------------------------------------------------------------------
//* \fn    AT91F_SVC_USDRIVER_DataToSend
//* \brief This function is a wrapper used by AT91S_SVC_TXUSART service to invoke AT91S_SVC_SBUFFER service
//*----------------------------------------------------------------------------
static unsigned int AT91F_SVC_USDRIVER_DataToSend ( // \return number of bytes to send
	char *pBuffer[])                   // \arg reference to a pointer on the buffer to send
{
	return svcBuffer.DataToSend(&svcBuffer, pBuffer);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_SVC_USDRIVER_LockData
//* \brief This function is a wrapper used by AT91S_SVC_TXUSART service to invoke AT91S_SVC_SBUFFER service
//*----------------------------------------------------------------------------
static void AT91F_SVC_USDRIVER_LockData (
	char *pBuffer,            // \arg pointer on the buffer to lock
	unsigned int bufferSize)  // \arg number of bytes to lock
{
	svcBuffer.LockData(&svcBuffer, pBuffer, bufferSize);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_SVC_USDRIVER_ReleaseData
//* \brief This function is a wrapper used by AT91S_SVC_TXUSART service to invoke AT91S_SVC_SBUFFER service
//*----------------------------------------------------------------------------
static void AT91F_SVC_USDRIVER_ReleaseData (
	char *pBuffer,            // \arg pointer on the buffer to lock
	unsigned int bufferSize)  // \arg number of bytes to lock
{
	svcBuffer.ReleaseData(&svcBuffer, pBuffer, bufferSize);
}


//*----------------------------------------------------------------------------
//* \fn    AT91F_SVC_USDRIVER_DriverHandler
//* \brief This function is the IT handler for USART
//*----------------------------------------------------------------------------
void AT91F_SVC_USDRIVER_DriverHandler()
{
	volatile unsigned int csr = AT91C_BASE_US1->US_CSR;
	svcTxUsart.TxHandler(&svcTxUsart, csr);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_SVC_USDRIVER_Open
//* \brief This function is the IT handler for USART
//*----------------------------------------------------------------------------
AT91PS_SVC_USDRIVER AT91F_SVC_USDRIVER_Open(
	AT91PS_SVC_USDRIVER pDriver, // \arg Pointer to AT91S_SVC_USDRIVER service
	AT91PS_USART pUsart,         // \arg pointer to USART arguments
	unsigned int usartId,        // \arg USART id
	char *pBuffer,               // \arg TX buffer size (MUST BE > 2 BYTES)
	unsigned int bufferSize)     // \arg TX buffer size (MUST BE > 2 BYTES)
{
	pDriver->semaphore = 0;

	// Open a SBUFFER service
	AT91F_SVC_SBUFFER_Open(
		&(pDriver->svcBuffer),
		pBuffer, bufferSize);
	// Open a TXUSART service
	AT91F_SVC_TXUSART_Open(
		&(pDriver->svcBuffer),
		pUsart,
		(AT91PF_SVC_TXUSART_DataToSend)  AT91F_SVC_USDRIVER_DataToSend,
		(AT91PF_SVC_TXUSART_LockData)    AT91F_SVC_USDRIVER_LockData,
		(AT91PF_SVC_TXUSART_ReleaseData) AT91F_SVC_USDRIVER_ReleaseData);

	// Configure Usart
	AT91F_US_Configure (
		pUsart,          // DBGU base address
		48000000,        // 48 MHz
		AT91C_US_ASYNC_MODE,        // mode Register to be programmed
		115200 ,                   // baudrate to be programmed
		0);                        // timeguard to be programmed

	// Configure AIC controller to handle Usart interrupts
	AT91F_AIC_ConfigureIt (
		AT91C_BASE_AIC,                        // AIC base address
		usartId,                               // System peripheral ID
		AT91C_AIC_PRIOR_HIGHEST,               // Max priority
		AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, // Level sensitive
		AT91F_ASM_US0_Handler );

	// Enable Usart interrupt in AIC
	AT91F_AIC_EnableIt(
		AT91C_BASE_AIC,                        // AIC base address
		usartId);                              // System peripheral ID

	// Enable Transmit
	AT91F_US_EnableTx( pUsart);
	AT91F_PDC_EnableTx((AT91PS_PDC) pUsart->US_RPR);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_SVC_DRIVER_Write
//* \brief This function is the IT handler for USART
//*----------------------------------------------------------------------------
void AT91F_SVC_USDRIVER_Write(
	AT91PS_SVC_USDRIVER pDriver, // \arg Pointer to AT91S_SVC_USDRIVER service
	char *pBuffer,           // \arg pointer on buffer to be sent
	unsigned int bufferSize) // \arg number of bytes to be written
{
	unsigned int bytesWritten;
	while (pDriver->semaphore);
	pDriver->semaphore = 1;
	while (bufferSize) {
		bytesWritten = pDriver->svcBuffer.Write(&svcBuffer, pBuffer, bufferSize);
		if (bytesWritten) {
			pDriver->svcTxUsart.StartTx(&svcTxUsart);
			pBuffer += bytesWritten;
			bufferSize -= bytesWritten;
		}
	}
	pDriver->semaphore = 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一二三区在线观看| 国产成人精品亚洲777人妖| 国产精品久久久久三级| 日韩视频一区在线观看| 日韩你懂的电影在线观看| 91精品啪在线观看国产60岁| 538prom精品视频线放| 91精品啪在线观看国产60岁| 制服.丝袜.亚洲.另类.中文| 欧美一区二区三区在线电影 | 韩国精品一区二区| 久久国产综合精品| 激情丁香综合五月| 国产精品一区免费视频| 成人午夜视频网站| 99精品在线免费| 欧美午夜精品久久久久久孕妇| 欧美亚洲丝袜传媒另类| 在线播放视频一区| 欧美精品一区二区三区在线| 日本一区二区三区国色天香 | 成人avav在线| 在线视频欧美精品| 欧美成人精品二区三区99精品| 久久久亚洲国产美女国产盗摄| 中文字幕中文字幕中文字幕亚洲无线| 成人欧美一区二区三区黑人麻豆| 亚洲一区二区三区中文字幕在线| 日韩va亚洲va欧美va久久| 麻豆成人在线观看| 94色蜜桃网一区二区三区| 91.麻豆视频| 久久精品亚洲麻豆av一区二区| 日韩美女视频19| 日本伊人色综合网| 99视频精品全部免费在线| 制服丝袜国产精品| 亚洲色图在线视频| 久草热8精品视频在线观看| 91一区一区三区| 精品国产乱码久久久久久闺蜜| 亚洲视频在线一区二区| 久久丁香综合五月国产三级网站| 91尤物视频在线观看| 欧美电影免费观看高清完整版在 | 成人美女视频在线观看18| 欧美日韩国产另类一区| 国产欧美日韩精品一区| 日韩高清在线一区| 91免费国产在线观看| xvideos.蜜桃一区二区| 亚洲影院久久精品| 不卡av在线免费观看| 欧美大尺度电影在线| 一区二区成人在线| 99久久免费视频.com| 精品免费国产一区二区三区四区| 亚洲一区二区偷拍精品| 91免费国产视频网站| 国产精品乱码久久久久久| 激情都市一区二区| 日韩三级av在线播放| 亚欧色一区w666天堂| 色网综合在线观看| 国产精品视频免费| 国产盗摄女厕一区二区三区| 日韩欧美国产综合| 青娱乐精品视频在线| 欧美日韩精品三区| 亚洲第一在线综合网站| 在线亚洲精品福利网址导航| 国产精品成人网| 99久久免费精品| 亚洲欧美综合网| 高清不卡在线观看av| 欧美激情在线一区二区三区| 国产精品18久久久久久久网站| 欧美草草影院在线视频| 久久er99热精品一区二区| 欧美一二三区精品| 国产综合色在线| 国产午夜一区二区三区| 国产v综合v亚洲欧| 国产精品网友自拍| 91农村精品一区二区在线| 一区二区三区四区不卡在线| 在线观看日韩国产| 亚洲va国产天堂va久久en| 欧美群妇大交群中文字幕| 人人超碰91尤物精品国产| 精品福利一二区| 国产69精品久久99不卡| 亚洲人成精品久久久久久| 欧美吞精做爰啪啪高潮| 热久久久久久久| 国产三级精品在线| 91黄色免费观看| 美女性感视频久久| 国产亚洲欧洲997久久综合| 白白色 亚洲乱淫| 婷婷激情综合网| 日韩欧美国产麻豆| 99国产精品99久久久久久| 亚洲小说欧美激情另类| ww久久中文字幕| 91精彩视频在线| 激情久久五月天| 亚洲综合自拍偷拍| 2021国产精品久久精品| 91丨九色丨国产丨porny| 婷婷综合另类小说色区| 国产无人区一区二区三区| 欧美亚一区二区| 国产91综合一区在线观看| 亚洲综合无码一区二区| ww久久中文字幕| 在线播放一区二区三区| av中文字幕一区| 激情都市一区二区| 午夜av电影一区| 国产精品电影一区二区三区| 欧美精品久久一区二区三区| 成人午夜视频福利| 久久国产三级精品| 亚洲自拍偷拍网站| 国产精品久久久久久久岛一牛影视 | 男女男精品视频网| 亚洲嫩草精品久久| 国产精品无遮挡| 欧美电影免费观看高清完整版在线观看| 91在线免费看| 国产91高潮流白浆在线麻豆| 蜜桃av一区二区三区| 亚洲国产色一区| 亚洲蜜臀av乱码久久精品| 国产亚洲综合在线| 精品久久久久一区| 欧美一区二区成人| 7777精品伊人久久久大香线蕉完整版| 99久久免费精品高清特色大片| 国产一区二区三区在线观看免费 | 国产一区 二区 三区一级| 亚洲成人免费在线| 亚洲激情六月丁香| 亚洲人成7777| 亚洲免费成人av| 一区二区在线看| 伊人婷婷欧美激情| 一区二区视频在线看| 亚洲女厕所小便bbb| 亚洲免费在线视频| 夜夜精品视频一区二区| 一区二区三区色| 一区二区三区国产精品| 亚洲另类在线制服丝袜| 亚洲综合激情网| 亚洲高清免费观看| 天天做天天摸天天爽国产一区 | 日韩一级二级三级| 日韩欧美不卡在线观看视频| www成人在线观看| 国产亚洲一区二区在线观看| 欧美国产精品v| 亚洲精品美国一| 亚洲国产日韩在线一区模特 | 国产农村妇女毛片精品久久麻豆 | 欧美午夜在线一二页| 欧美体内she精高潮| 欧美三级在线看| 欧美日韩情趣电影| 51精品国自产在线| 久久久久久久久久久黄色| 欧美激情在线一区二区三区| 日韩美女视频一区| 日本不卡123| 99视频精品在线| 欧美喷水一区二区| 久久久www免费人成精品| 国产精品毛片久久久久久久| 亚洲综合无码一区二区| 另类小说一区二区三区| 懂色av噜噜一区二区三区av| 日本高清不卡在线观看| 欧美成人猛片aaaaaaa| 国产精品久久久久久久久晋中| 亚洲国产精品一区二区尤物区| 久久成人免费电影| 色综合色综合色综合| 精品福利一区二区三区免费视频| 亚洲欧美在线视频观看| 欧美a一区二区| 成人动漫视频在线| 欧美一级在线视频| 中文字幕一区在线| 美女视频黄a大片欧美| 97成人超碰视| 国产亚洲一区二区三区| 日韩不卡在线观看日韩不卡视频| 成人性生交大片免费看中文网站| 在线不卡一区二区|