1 //*----------------------------------------------------------------------------
2 //* ATMEL Microcontroller Software Support - ROUSSET -
3 //*----------------------------------------------------------------------------
4 //* The software is delivered "AS IS" without warranty or condition of any
5 //* kind, either express, implied or statutory. This includes without
6 //* limitation any warranty or condition with respect to merchantability or
7 //* fitness for any particular purpose, or against the infringements of
8 //* intellectual property rights of others.
9 //*----------------------------------------------------------------------------
10 //* File Name : embedded_sevices.h
11 //* Object : Header File with all the embedded software services definitions
13 //* 1.0 24 Jan 2003 FB : Creation
14 //*----------------------------------------------------------------------------
15 #ifndef embedded_sevices_h
16 #define embedded_sevices_h
18 #include "AT91RM9200.h"
20 #define AT91C_BASE_ROM (char *)0x00100000
23 #define AT91C_BUFFER_SUCCESS 0
24 #define AT91C_BUFFER_ERROR_SHIFT 16
25 #define AT91C_BUFFER_ERROR (0x0F << AT91C_BUFFER_ERROR_SHIFT)
27 #define AT91C_BUFFER_OVERFLOW (0x01 << AT91C_BUFFER_ERROR_SHIFT)
28 #define AT91C_BUFFER_UNDERRUN (0x02 << AT91C_BUFFER_ERROR_SHIFT)
30 typedef unsigned int AT91S_BufferStatus
;
34 // This structure is a virtual object of a buffer
35 typedef struct _AT91S_Buffer
37 struct _AT91S_Pipe
*pPipe
;
40 // Functions invoked by the pipe
41 AT91S_BufferStatus (*SetRdBuffer
) (struct _AT91S_Buffer
*pSBuffer
, char *pBuffer
, unsigned int Size
);
42 AT91S_BufferStatus (*SetWrBuffer
) (struct _AT91S_Buffer
*pSBuffer
, char const *pBuffer
, unsigned int Size
);
43 AT91S_BufferStatus (*RstRdBuffer
) (struct _AT91S_Buffer
*pSBuffer
);
44 AT91S_BufferStatus (*RstWrBuffer
) (struct _AT91S_Buffer
*pSBuffer
);
45 char (*MsgWritten
) (struct _AT91S_Buffer
*pSBuffer
, char const *pBuffer
);
46 char (*MsgRead
) (struct _AT91S_Buffer
*pSBuffer
, char const *pBuffer
);
47 // Functions invoked by the peripheral
48 AT91S_BufferStatus (*GetWrBuffer
) (struct _AT91S_Buffer
*pSBuffer
, char const **pData
, unsigned int *pSize
);
49 AT91S_BufferStatus (*GetRdBuffer
) (struct _AT91S_Buffer
*pSBuffer
, char **pData
, unsigned int *pSize
);
50 AT91S_BufferStatus (*EmptyWrBuffer
) (struct _AT91S_Buffer
*pSBuffer
, unsigned int size
);
51 AT91S_BufferStatus (*FillRdBuffer
) (struct _AT91S_Buffer
*pSBuffer
, unsigned int size
);
52 char (*IsWrEmpty
) (struct _AT91S_Buffer
*pSBuffer
);
53 char (*IsRdFull
) (struct _AT91S_Buffer
*pSBuffer
);
54 } AT91S_Buffer
, *AT91PS_Buffer
;
56 // ===========================================================================================
57 // SimpleBuffer definition
59 // This structure is pointed by pRealBuffer field in the SBuffer
60 // It contains usefull information for a real implementation of
62 // The application just create an instance of SSBUffer and SBuffer,
63 // call OpenSimpleBuffer, and continue using SBuffer instance
65 typedef struct _AT91S_SBuffer
69 char const *pWrBuffer
;
70 unsigned int szRdBuffer
;
71 unsigned int szWrBuffer
;
72 unsigned int stRdBuffer
;
73 unsigned int stWrBuffer
;
74 } AT91S_SBuffer
, *AT91PS_SBuffer
;
76 typedef AT91PS_Buffer (*AT91PF_OpenSBuffer
) (AT91PS_SBuffer
);
78 // This function is called by the application
79 extern AT91PS_Buffer
AT91F_OpenSBuffer(AT91PS_SBuffer pBuffer
);
81 // Functions invoked by the pipe
82 extern AT91S_BufferStatus
AT91F_SbSetRdBuffer (AT91PS_Buffer pBuffer
, char *pData
, unsigned int Size
);
83 extern AT91S_BufferStatus
AT91F_SbSetWrBuffer (AT91PS_Buffer pBuffer
, char const *pData
, unsigned int Size
);
84 extern AT91S_BufferStatus
AT91F_SbRstRdBuffer (AT91PS_Buffer pBuffer
);
85 extern AT91S_BufferStatus
AT91F_SbRstWrBuffer (AT91PS_Buffer pBuffer
);
86 extern char AT91F_SbMsgWritten (AT91PS_Buffer pBuffer
, char const *pMsg
);
87 extern char AT91F_SbMsgRead (AT91PS_Buffer pBuffer
, char const *pMsg
);
88 // Functions invoked by the peripheral
89 extern AT91S_BufferStatus
AT91F_SbGetWrBuffer (AT91PS_Buffer pBuffer
, char const **pData
, unsigned int *pSize
);
90 extern AT91S_BufferStatus
AT91F_SbGetRdBuffer (AT91PS_Buffer pBuffer
, char **pData
, unsigned int *pSize
);
91 extern AT91S_BufferStatus
AT91F_SbEmptyWrBuffer(AT91PS_Buffer pBuffer
, unsigned int size
);
92 extern AT91S_BufferStatus
AT91F_SbFillRdBuffer (AT91PS_Buffer pBuffer
, unsigned int size
);
93 extern char AT91F_SbIsWrEmpty (AT91PS_Buffer pBuffer
);
94 extern char AT91F_SbIsRdFull (AT91PS_Buffer pBuffer
);
97 extern char const *AT91F_SbGetError(AT91S_BufferStatus errorNumber
);
101 #define AT91C_OPEN_CTRLTEMPO_SUCCESS 0
102 #define AT91C_ERROR_OPEN_CTRLTEMPO 1
103 #define AT91C_START_OK 2
104 #define AT91C_STOP_OK 3
105 #define AT91C_TIMEOUT_REACHED 4
107 typedef enum _AT91E_SvcTempo
{
112 typedef unsigned int AT91S_TempoStatus
;
115 typedef struct _AT91S_SvcTempo
119 AT91S_TempoStatus (*Start
) (
120 struct _AT91S_SvcTempo
*pSvc
,
121 unsigned int timeout
,
123 void (*callback
) (AT91S_TempoStatus
, void *),
125 AT91S_TempoStatus (*Stop
) (struct _AT91S_SvcTempo
*pSvc
);
127 struct _AT91S_SvcTempo
*pPreviousTempo
;
128 struct _AT91S_SvcTempo
*pNextTempo
;
131 unsigned int TickTempo
; //* timeout value
132 unsigned int ReloadTempo
;//* Reload value for periodic execution
133 void (*TempoCallback
)(AT91S_TempoStatus
, void *);
136 } AT91S_SvcTempo
, *AT91PS_SvcTempo
;
140 typedef struct _AT91S_CtlTempo
144 // Start and stop for Timer hardware
145 AT91S_TempoStatus (*CtlTempoStart
) (void *pTimer
);
146 AT91S_TempoStatus (*CtlTempoStop
) (void *pTimer
);
148 // Start and stop for Tempo service
149 AT91S_TempoStatus (*SvcTempoStart
) (
150 struct _AT91S_SvcTempo
*pSvc
,
151 unsigned int timeout
,
153 void (*callback
) (AT91S_TempoStatus
, void *),
155 AT91S_TempoStatus (*SvcTempoStop
) (struct _AT91S_SvcTempo
*pSvc
);
156 AT91S_TempoStatus (*CtlTempoSetTime
)(struct _AT91S_CtlTempo
*pCtrl
, unsigned int NewTime
);
157 AT91S_TempoStatus (*CtlTempoGetTime
)(struct _AT91S_CtlTempo
*pCtrl
);
158 AT91S_TempoStatus (*CtlTempoIsStart
)(struct _AT91S_CtlTempo
*pCtrl
);
159 AT91S_TempoStatus (*CtlTempoCreate
) (
160 struct _AT91S_CtlTempo
*pCtrl
,
161 struct _AT91S_SvcTempo
*pTempo
);
162 AT91S_TempoStatus (*CtlTempoRemove
) (
163 struct _AT91S_CtlTempo
*pCtrl
,
164 struct _AT91S_SvcTempo
*pTempo
);
165 AT91S_TempoStatus (*CtlTempoTick
) (struct _AT91S_CtlTempo
*pCtrl
);
169 void *pPrivateData
; // Pointer to devived class
170 void const *pTimer
; // hardware
171 AT91PS_SvcTempo pFirstTempo
;
172 AT91PS_SvcTempo pNewTempo
;
173 } AT91S_CtlTempo
, *AT91PS_CtlTempo
;
174 typedef AT91S_TempoStatus (*AT91PF_OpenCtlTempo
) ( AT91PS_CtlTempo
, void const *);
176 // This function is called by the application.
177 extern AT91S_TempoStatus
AT91F_OpenCtlTempo( AT91PS_CtlTempo pCtrlTempo
, void const *pTempoTimer
);
179 extern AT91S_TempoStatus
AT91F_STStart (void *);
180 extern AT91S_TempoStatus
AT91F_STStop (void *);
181 extern AT91S_TempoStatus
AT91F_STSetTime (AT91PS_CtlTempo
, unsigned int);
182 extern AT91S_TempoStatus
AT91F_STGetTime (AT91PS_CtlTempo
);
183 extern AT91S_TempoStatus
AT91F_STIsStart (AT91PS_CtlTempo
);
184 extern AT91S_TempoStatus
AT91F_CtlTempoCreate (AT91PS_CtlTempo
, AT91PS_SvcTempo
);
185 extern AT91S_TempoStatus
AT91F_CtlTempoRemove (AT91PS_CtlTempo
, AT91PS_SvcTempo
);
186 extern AT91S_TempoStatus
AT91F_CtlTempoTick (AT91PS_CtlTempo
);
187 extern AT91S_TempoStatus
AT91F_SvcTempoStart (
188 AT91PS_SvcTempo pSvc
,
189 unsigned int timeout
,
191 void (*callback
) (AT91S_TempoStatus
, void *),
193 extern AT91S_TempoStatus
AT91F_SvcTempoStop (AT91PS_SvcTempo
);
196 // Following types are defined in another header files
197 struct _AT91S_Buffer
;
200 #define AT91C_COMMSVC_SUCCESS 0
201 #define AT91C_COMMSVC_ERROR_SHIFT 8
202 #define AT91C_COMMSVC_ERROR (0x0f << AT91C_COMMSVC_ERROR_SHIFT)
204 typedef unsigned int AT91S_SvcCommStatus
;
206 // AT91S_Service definition
207 // This structure is an abstraction of a communication peripheral
208 typedef struct _AT91S_Service
211 AT91S_SvcCommStatus (*Reset
) (struct _AT91S_Service
*pService
);
212 AT91S_SvcCommStatus (*StartTx
)(struct _AT91S_Service
*pService
);
213 AT91S_SvcCommStatus (*StartRx
)(struct _AT91S_Service
*pService
);
214 AT91S_SvcCommStatus (*StopTx
) (struct _AT91S_Service
*pService
);
215 AT91S_SvcCommStatus (*StopRx
) (struct _AT91S_Service
*pService
);
216 char (*TxReady
)(struct _AT91S_Service
*pService
);
217 char (*RxReady
)(struct _AT91S_Service
*pService
);
219 struct _AT91S_Buffer
*pBuffer
; // Link to a buffer object
221 } AT91S_SvcComm
, *AT91PS_SvcComm
;
224 #define AT91C_XMODEM_SOH 0x01 /* Start of Heading for 128 bytes */
225 #define AT91C_XMODEM_STX 0x02 /* Start of heading for 1024 bytes */
226 #define AT91C_XMODEM_EOT 0x04 /* End of transmission */
227 #define AT91C_XMODEM_ACK 0x06 /* Acknowledge */
228 #define AT91C_XMODEM_NAK 0x15 /* Negative Acknowledge */
229 #define AT91C_XMODEM_CRCCHR 'C'
231 #define AT91C_XMODEM_PACKET_SIZE 2 // packet + packetCRC
232 #define AT91C_XMODEM_CRC_SIZE 2 // crcLSB + crcMSB
233 #define AT91C_XMODEM_DATA_SIZE_SOH 128 // data 128 corresponding to SOH header
234 #define AT91C_XMODEM_DATA_SIZE_STX 1024 // data 1024 corresponding to STX header
236 //* Following structure is used by SPipe to refer to the USB device peripheral endpoint
237 typedef struct _AT91PS_SvcXmodem
{
240 AT91S_SvcCommStatus (*Handler
) (struct _AT91PS_SvcXmodem
*, unsigned int);
241 AT91S_SvcCommStatus (*StartTx
) (struct _AT91PS_SvcXmodem
*, unsigned int);
242 AT91S_SvcCommStatus (*StopTx
) (struct _AT91PS_SvcXmodem
*, unsigned int);
245 AT91S_SvcCommStatus (*ReadHandler
) (struct _AT91PS_SvcXmodem
*, unsigned int csr
);
246 AT91S_SvcCommStatus (*WriteHandler
) (struct _AT91PS_SvcXmodem
*, unsigned int csr
);
247 unsigned short (*GetCrc
) (char *ptr
, unsigned int count
);
248 char (*CheckHeader
) (unsigned char currentPacket
, char *packet
);
249 char (*CheckData
) (struct _AT91PS_SvcXmodem
*);
251 AT91S_SvcComm parent
; // Base class
254 AT91S_SvcTempo tempo
; // Link to a AT91S_Tempo object
257 unsigned int dataSize
; // = XMODEM_DATA_STX or XMODEM_DATA_SOH
258 char packetDesc
[AT91C_XMODEM_PACKET_SIZE
];
259 unsigned char packetId
; // Current packet
262 char eot
; // end of transmition
263 } AT91S_SvcXmodem
, *AT91PS_SvcXmodem
;
265 typedef AT91PS_SvcComm (*AT91PF_OpenSvcXmodem
) ( AT91PS_SvcXmodem
, AT91PS_USART
, AT91PS_CtlTempo
);
267 // This function is called by the application.
268 extern AT91PS_SvcComm
AT91F_OpenSvcXmodem( AT91PS_SvcXmodem
, AT91PS_USART
, AT91PS_CtlTempo
);
270 extern unsigned short AT91F_SvcXmodemGetCrc (char *ptr
, unsigned int count
);
271 extern char AT91F_SvcXmodemCheckHeader(unsigned char currentPacket
, char *packet
);
272 extern char AT91F_SvcXmodemCheckData (AT91PS_SvcXmodem pSvcXmodem
);
273 extern AT91S_SvcCommStatus
AT91F_SvcXmodemReadHandler(AT91PS_SvcXmodem pSvcXmodem
, unsigned int csr
);
274 extern AT91S_SvcCommStatus
AT91F_SvcXmodemWriteHandler(AT91PS_SvcXmodem pSvcXmodem
, unsigned int csr
);
275 extern AT91S_SvcCommStatus
AT91F_SvcXmodemStartTx(AT91PS_SvcComm pSvcComm
);
276 extern AT91S_SvcCommStatus
AT91F_SvcXmodemStopTx(AT91PS_SvcComm pSvcComm
);
277 extern AT91S_SvcCommStatus
AT91F_SvcXmodemStartRx(AT91PS_SvcComm pSvcComm
);
278 extern AT91S_SvcCommStatus
AT91F_SvcXmodemStopRx(AT91PS_SvcComm pSvcComm
);
279 extern char AT91F_SvcXmodemTxReady(AT91PS_SvcComm pService
);
280 extern char AT91F_SvcXmodemRxReady(AT91PS_SvcComm pSvcComm
);
284 #define AT91C_PIPE_SUCCESS 0
285 #define AT91C_PIPE_ERROR_SHIFT 8
286 #define AT91C_PIPE_ERROR (0x0F << AT91C_PIPE_ERROR_SHIFT)
288 #define AT91C_PIPE_OPEN_FAILED (1 << AT91C_PIPE_ERROR_SHIFT)
289 #define AT91C_PIPE_WRITE_FAILED (2 << AT91C_PIPE_ERROR_SHIFT)
290 #define AT91C_PIPE_WRITE_ABORTED (3 << AT91C_PIPE_ERROR_SHIFT)
291 #define AT91C_PIPE_READ_FAILED (4 << AT91C_PIPE_ERROR_SHIFT)
292 #define AT91C_PIPE_READ_ABORTED (5 << AT91C_PIPE_ERROR_SHIFT)
293 #define AT91C_PIPE_ABORT_FAILED (6 << AT91C_PIPE_ERROR_SHIFT)
294 #define AT91C_PIPE_RESET_FAILED (7 << AT91C_PIPE_ERROR_SHIFT)
296 /* _AT91S_Pipe stucture */
297 typedef unsigned int AT91S_PipeStatus
;
299 typedef struct _AT91S_Pipe
301 // A pipe is linked with a peripheral and a buffer
302 AT91PS_SvcComm pSvcComm
;
303 AT91PS_Buffer pBuffer
;
305 // Callback functions with their arguments
306 void (*WriteCallback
) (AT91S_PipeStatus
, void *);
307 void (*ReadCallback
) (AT91S_PipeStatus
, void *);
308 void *pPrivateReadData
;
309 void *pPrivateWriteData
;
312 AT91S_PipeStatus (*Write
) (
313 struct _AT91S_Pipe
*pPipe
,
316 void (*callback
) (AT91S_PipeStatus
, void *),
318 AT91S_PipeStatus (*Read
) (
319 struct _AT91S_Pipe
*pPipe
,
322 void (*callback
) (AT91S_PipeStatus
, void *),
324 AT91S_PipeStatus (*AbortWrite
) (
325 struct _AT91S_Pipe
*pPipe
);
326 AT91S_PipeStatus (*AbortRead
) (
327 struct _AT91S_Pipe
*pPipe
);
328 AT91S_PipeStatus (*Reset
) (
329 struct _AT91S_Pipe
*pPipe
);
331 struct _AT91S_Pipe
*pPipe
,
334 struct _AT91S_Pipe
*pPipe
,
336 } AT91S_Pipe
, *AT91PS_Pipe
;
338 // types used in AT91S_Pipe
339 typedef AT91PS_Pipe (*AT91PF_OpenPipe
) (AT91PS_Pipe
, AT91PS_SvcComm
, AT91PS_Buffer
);
340 typedef void (*AT91PF_PipeWriteCallBack
) (AT91S_PipeStatus
, void *);
341 typedef void (*AT91PF_PipeReadCallBack
) (AT91S_PipeStatus
, void *);
342 typedef AT91S_PipeStatus (*AT91PF_PipeWrite
) (AT91PS_Pipe
, char const *, unsigned int, void (*) (AT91S_PipeStatus
, void *), void *);
343 typedef AT91S_PipeStatus (*AT91PF_PipeRead
) (AT91PS_Pipe
, char const *, unsigned int, void (*) (AT91S_PipeStatus
, void *), void *);
344 typedef AT91S_PipeStatus (*AT91PF_PipeAbortWrite
) (AT91PS_Pipe
);
345 typedef AT91S_PipeStatus (*AT91PF_PipeAbortRead
) (AT91PS_Pipe
);
346 typedef AT91S_PipeStatus (*AT91PF_PipeReset
) (AT91PS_Pipe
);
347 typedef char (*AT91PF_PipeIsWritten
) (AT91PS_Pipe
, char const *);
348 typedef char (*AT91PF_PipeIsReceived
) (AT91PS_Pipe
, char const *);
350 // This function is called by the application
351 extern AT91PS_Pipe
AT91F_OpenPipe(
353 AT91PS_SvcComm pSvcComm
,
354 AT91PS_Buffer pBuffer
);
356 // Following functions are called through AT91S_Pipe pointers
358 extern AT91S_PipeStatus
AT91F_PipeWrite(
362 AT91PF_PipeWriteCallBack callback
,
364 extern AT91S_PipeStatus
AT91F_PipeRead(
368 AT91PF_PipeReadCallBack callback
,
370 extern AT91S_PipeStatus
AT91F_PipeAbortWrite(AT91PS_Pipe pPipe
);
371 extern AT91S_PipeStatus
AT91F_PipeAbortRead(AT91PS_Pipe pPipe
);
372 extern AT91S_PipeStatus
AT91F_PipeReset(AT91PS_Pipe pPipe
);
373 extern char AT91F_PipeMsgWritten(AT91PS_Pipe pPipe
, char const *pVoid
);
374 extern char AT91F_PipeMsgReceived(AT91PS_Pipe pPipe
, char const *pVoid
);
377 // This function parse the error number and return a string
378 // describing the error message
379 extern char const *AT91F_PipeGetError(AT91S_PipeStatus msgId
);
382 extern const unsigned char bit_rev
[256];
384 extern void CalculateCrc32(const unsigned char *,unsigned int, unsigned int *);
385 extern void CalculateCrc16(const unsigned char *, unsigned int , unsigned short *);
386 extern void CalculateCrcHdlc(const unsigned char *, unsigned int, unsigned short *);
387 extern void CalculateCrc16ccitt(const unsigned char *, unsigned int , unsigned short *);
389 typedef const unsigned char* AT91PS_SVC_CRC_BIT_REV
;
391 typedef void (*AT91PF_SVC_CRC32
) (const unsigned char *, unsigned int, unsigned int *);
392 typedef void (*AT91PF_SVC_CRC16
) (const unsigned char *, unsigned int, unsigned short *);
393 typedef void (*AT91PF_SVC_CRCHDLC
) (const unsigned char *, unsigned int, unsigned short *);
394 typedef void (*AT91PF_SVC_CRCCCITT
)(const unsigned char *, unsigned int , unsigned short *);
397 typedef short (*AT91PF_Sinus
) (int angle
);
398 typedef const short * AT91PS_SINE_TAB
;
400 extern short AT91F_Sinus(int angle
);
401 extern const short AT91C_SINUS180_TAB
[256];
404 typedef void (TypeAICHandler
) (void) ;
407 // ROM BOOT Structure Element Definition (liv v2)
408 typedef struct _AT91S_MEMCDesc
410 AT91PS_MC memc_base
; /* Peripheral base */
411 unsigned char periph_id
; /* MC Peripheral Identifier */
412 } AT91S_MEMCDesc
, *AT91PS_MEMCDesc
;
414 typedef struct _AT91S_Pio2Desc
416 AT91PS_PIO pio_base
; /* Base Address */
417 unsigned char periph_id
; /* Peripheral Identifier */
418 unsigned char pio_number
; /* Total Pin Number */
419 } AT91S_Pio2Desc
, *AT91PS_Pio2Desc
;
421 typedef struct _AT91S_SPIDesc
423 AT91PS_SPI spi_base
;
424 const AT91PS_PIO pio_base
;
425 unsigned char periph_id
;
426 unsigned char pin_spck
;
427 unsigned char pin_miso
;
428 unsigned char pin_mosi
;
429 unsigned char pin_npcs
[4] ;
430 } AT91S_SPIDesc
, *AT91PS_SPIDesc
;
432 typedef struct _AT91S_USART2Desc
434 AT91PS_USART usart_base
; /* Peripheral base */
435 const AT91PS_PIO pio_base
; /* IO controller descriptor */
436 unsigned int pin_rxd
; /* RXD pin number in the PIO */
437 unsigned int pin_txd
; /* TXD pin number in the PIO */
438 unsigned int pin_sck
; /* SCK pin number in the PIO */
439 unsigned int pin_rts
; /* RTS pin number in the PIO */
440 unsigned int pin_cts
; /* CTS pin number in the PIO */
441 unsigned int pin_dtr
; /* DTR pin number in the PIO */
442 unsigned int pin_ri
; /* RI pin number in the PIO */
443 unsigned int pin_dsr
; /* DSR pin number in the PIO */
444 unsigned int pin_dcd
; /* DCD pin number in the PIO */
445 unsigned int periph_id
; /* USART Peripheral Identifier */
446 } AT91S_USART2Desc
, *AT91PS_USART2Desc
;
448 typedef struct _AT91S_TWIDesc
450 AT91PS_TWI TWI_base
;
451 const AT91PS_PIO pio_base
;
452 unsigned int pin_sck
;
453 unsigned int pin_sda
;
454 unsigned int periph_id
;
455 }AT91S_TWIDesc
, *AT91PS_TWIDesc
;
457 typedef struct _AT91S_STDesc
459 AT91PS_ST st_base
; /* Peripheral base address */
460 TypeAICHandler
*AsmSTHandler
; /* Assembly interrupt handler */
461 unsigned char PeriphId
; /* Peripheral Identifier */
462 } AT91S_STDesc
, *AT91PS_STDesc
;
464 typedef struct _AT91S_RomBoot
{
465 const unsigned int version
;
466 // Peripheral descriptors
467 const AT91S_MEMCDesc MEMC_DESC
;
468 const AT91S_STDesc SYSTIMER_DESC
;
469 const AT91S_Pio2Desc PIOA_DESC
;
470 const AT91S_Pio2Desc PIOB_DESC
;
471 const AT91S_USART2Desc DBGU_DESC
;
472 const AT91S_USART2Desc USART0_DESC
;
473 const AT91S_USART2Desc USART1_DESC
;
474 const AT91S_USART2Desc USART2_DESC
;
475 const AT91S_USART2Desc USART3_DESC
;
476 const AT91S_TWIDesc TWI_DESC
;
477 const AT91S_SPIDesc SPI_DESC
;
480 const AT91PF_OpenPipe OpenPipe
;
481 const AT91PF_OpenSBuffer OpenSBuffer
;
482 const unsigned int reserved1
;
483 const AT91PF_OpenSvcXmodem OpenSvcXmodem
;
484 const AT91PF_OpenCtlTempo OpenCtlTempo
;
485 const unsigned int reserved2
;
486 const unsigned int reserved3
;
487 const unsigned int reserved4
;
488 const AT91PF_SVC_CRC16 CRC16
;
489 const AT91PF_SVC_CRCCCITT CRCCCITT
;
490 const AT91PF_SVC_CRCHDLC CRCHDLC
;
491 const AT91PF_SVC_CRC32 CRC32
;
492 const AT91PS_SVC_CRC_BIT_REV Bit_Reverse_Array
;
493 const AT91PS_SINE_TAB SineTab
;
494 const AT91PF_Sinus Sine
;
495 } AT91S_RomBoot
, *AT91PS_RomBoot
;
497 #define AT91C_ROM_BOOT_ADDRESS ((const AT91S_RomBoot *) ( *((unsigned int *) (AT91C_BASE_ROM + 0x20))) )