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

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

?? driver.c

?? atmel arm9系列的USB與PC通信
?? 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一区二区三区免费野_久草精品视频
国产欧美视频在线观看| 视频一区视频二区中文| 亚洲自拍偷拍九九九| 国产精品亚洲一区二区三区在线| 91在线播放网址| 欧美国产精品一区二区| 蜜桃在线一区二区三区| 日本高清不卡一区| 国产精品久久久一区麻豆最新章节| 午夜影院在线观看欧美| 91片黄在线观看| 中文字幕一区二区三区视频| 精品一二线国产| 91精品国产全国免费观看| 1000精品久久久久久久久| 国产高清无密码一区二区三区| 日韩欧美视频一区| 琪琪久久久久日韩精品| 欧美日韩中文精品| 夜夜精品浪潮av一区二区三区| 成人a区在线观看| www激情久久| 国产精品一区专区| 久久婷婷国产综合国色天香| 蜜桃精品在线观看| 欧美一区二区久久| 日本成人在线不卡视频| 欧美剧情片在线观看| 午夜日韩在线观看| 91精品中文字幕一区二区三区| 午夜欧美在线一二页| 91精品国产全国免费观看| 日本vs亚洲vs韩国一区三区二区 | 国产精品毛片大码女人| 国产91精品免费| 中文字幕乱码久久午夜不卡| 成人性视频免费网站| 国产精品久久久久久久午夜片| 成人在线一区二区三区| 国产精品动漫网站| 91日韩精品一区| 午夜激情一区二区三区| 国产精品传媒入口麻豆| 成人av免费在线播放| 亚洲欧美另类在线| 日本电影亚洲天堂一区| 亚洲成人av一区二区| 欧美一级夜夜爽| 成人一区在线看| 一区二区三区免费在线观看| 欧美亚洲国产一区二区三区va| 五月天一区二区三区| 91精品欧美福利在线观看| 激情综合色综合久久综合| 中文在线免费一区三区高中清不卡 | 成人免费精品视频| 一区二区高清视频在线观看| 在线播放中文一区| 国产大陆a不卡| 亚洲综合激情网| 久久伊人中文字幕| 色综合视频在线观看| 久久精品国产澳门| 中文字幕日本乱码精品影院| 欧美日韩电影在线播放| 国产黄色精品视频| 亚洲国产一二三| 国产情人综合久久777777| 91高清在线观看| 国产在线播放一区| 亚洲国产视频网站| 久久久久久久久岛国免费| 在线看日韩精品电影| 国产精品一二三| 亚洲bt欧美bt精品777| 亚洲国产岛国毛片在线| 欧美肥妇bbw| 91免费国产在线观看| 国产精品系列在线播放| 亚洲.国产.中文慕字在线| 国产午夜精品久久久久久免费视| 色嗨嗨av一区二区三区| 国产又粗又猛又爽又黄91精品| 夜夜夜精品看看| 中文字幕av一区二区三区| 91麻豆精品国产91| 欧美性色黄大片| 99久久精品久久久久久清纯| 精品一区二区三区免费视频| 亚洲成人免费av| 夜夜亚洲天天久久| 亚洲女同女同女同女同女同69| 精品乱人伦一区二区三区| 欧美特级限制片免费在线观看| 成人午夜精品在线| 精品中文字幕一区二区| 日日骚欧美日韩| 亚洲成av人片| 亚洲免费伊人电影| 亚洲女同ⅹxx女同tv| 亚洲天天做日日做天天谢日日欢| 国产欧美日韩久久| 26uuu亚洲| 久久综合中文字幕| 精品乱人伦一区二区三区| 日韩欧美色综合网站| 日韩欧美精品在线视频| 日韩午夜av电影| 亚洲精品亚洲人成人网| 中文字幕永久在线不卡| 中文字幕欧美三区| 国产精品女人毛片| 欧美激情一区不卡| 国产精品国产a| 亚洲视频一二三区| 亚洲黄色av一区| 夜夜爽夜夜爽精品视频| 亚洲成人激情自拍| 青椒成人免费视频| 国产老女人精品毛片久久| 国产精品自拍三区| 成人av免费观看| 91成人免费在线| 欧美精三区欧美精三区| 日韩欧美aaaaaa| 国产日韩欧美精品综合| 亚洲欧洲成人自拍| 亚洲精品免费一二三区| 亚洲一区在线观看视频| 日韩av电影免费观看高清完整版 | 免费在线观看不卡| 国产一级精品在线| 国产69精品久久久久毛片| 国产成人av电影免费在线观看| 成人精品鲁一区一区二区| 91久久线看在观草草青青| 欧美视频一区在线| 日韩午夜激情av| 国产精品入口麻豆九色| 一级精品视频在线观看宜春院| 亚洲国产一区二区a毛片| 麻豆国产精品视频| 91年精品国产| 欧美一区二区三区视频免费播放| 久久日韩粉嫩一区二区三区 | www.爱久久.com| 欧美亚洲图片小说| 精品久久久久香蕉网| 亚洲图片欧美激情| 免费的成人av| 91蜜桃婷婷狠狠久久综合9色| 欧美日韩dvd在线观看| 精品国产制服丝袜高跟| 亚洲欧洲日本在线| 精品一区二区三区影院在线午夜 | 一区二区三区久久久| 国产制服丝袜一区| 欧美日韩国产一区| 国产精品美女久久久久久久久久久 | 成人久久久精品乱码一区二区三区| 欧美专区在线观看一区| 久久你懂得1024| jlzzjlzz国产精品久久| 日韩一本二本av| 亚洲三级在线看| 激情另类小说区图片区视频区| 色国产综合视频| 中文字幕va一区二区三区| 看国产成人h片视频| 色爱区综合激月婷婷| 国产亚洲一区二区三区四区 | 亚洲黄一区二区三区| 国产高清不卡二三区| 91麻豆精品国产91久久久久久 | 欧美成人精品高清在线播放| 亚洲精品成人天堂一二三| 国产黄人亚洲片| 欧美精品一区二区三区蜜臀| 天天色综合成人网| 在线视频亚洲一区| 亚洲人吸女人奶水| av电影一区二区| 国产三级久久久| 国产一区日韩二区欧美三区| 91精品国产综合久久精品app| 亚洲免费av观看| 99国产精品久| 中文字幕制服丝袜一区二区三区| 国内精品伊人久久久久av影院 | 中文字幕一区二区三区色视频| 国产一区在线观看麻豆| 日韩午夜在线播放| 蜜桃在线一区二区三区| 欧美一区二区三区白人| 男人的j进女人的j一区| 欧美一区日韩一区| 奇米一区二区三区av| 91精品蜜臀在线一区尤物| 日韩成人一区二区三区在线观看| 欧美少妇bbb|