2 * Hyper Operating System Application Framework
4 * @file at91usartdrv_write.c
5 * @brief %jp{ATMEL AT91シリーズUSART用デバイスドライバ}
7 * Copyright (C) 2006-2007 by Project HOS
8 * http://sourceforge.jp/projects/hos/
12 #include "at91usartdrv_local.h"
16 FILE_SIZE At91UsartDrv_Write(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, const void *pData, FILE_SIZE Size)
20 const unsigned char *pubBuf;
25 self = (C_AT91USARTDRV *)pDrvObj;
26 pChrFile = (C_CHRFILE *)pFileObj;
28 pubBuf = (const unsigned char *)pData;
31 SysMtx_Lock(self->hMtxSend);
33 for ( i = 0; i < Size; i++ )
36 while ( !(AT91USART_REG_READ(self, AT91USART_US_CSR) & 0x0002) )
38 if ( pChrFile->cWriteMode == FILE_WMODE_BLOCKING )
40 /* ブロッキングなら送信割り込みを待つ */
41 AT91USART_REG_WRITE(self, AT91USART_US_IER, 0x00000002); /* 送信割り込み許可 */
42 SysEvt_Wait(self->hEvtSend);
43 SysEvt_Clear(self->hEvtSend);
51 AT91USART_REG_WRITE(self, AT91USART_US_THR, c);
56 SysMtx_Unlock(self->hMtxSend);