mirror of
https://github.com/digistump/DigistumpArduino.git
synced 2025-11-03 13:04:48 -08:00
switch to setup for Arduino Boards Manager
This commit is contained in:
403
digistump-sam/system/libsam/include/USB_device.h
Normal file
403
digistump-sam/system/libsam/include/USB_device.h
Normal file
@@ -0,0 +1,403 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef USB_DEVICE_H_INCLUDED
|
||||
#define USB_DEVICE_H_INCLUDED
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
extern void UDD_WaitIN(void);
|
||||
extern void UDD_WaitOUT(void);
|
||||
extern void UDD_ClearIN(void);
|
||||
extern void UDD_ClearOUT(void);
|
||||
extern uint32_t UDD_WaitForINOrOUT(void);
|
||||
extern void UDD_ClearRxFlag(unsigned char bEndpoint);
|
||||
extern uint32_t UDD_ReceivedSetupInt(void);
|
||||
extern void UDD_ClearSetupInt(void);
|
||||
extern uint32_t UDD_ReadWriteAllowed(uint32_t ep);
|
||||
extern uint32_t UDD_FifoByteCount(uint32_t ep);
|
||||
extern uint8_t UDD_FifoFree(void);
|
||||
extern void UDD_ReleaseRX(uint32_t ep);
|
||||
extern void UDD_ReleaseTX(uint32_t ep);
|
||||
extern uint8_t UDD_FrameNumber(void);
|
||||
extern uint8_t UDD_GetConfiguration(void);
|
||||
|
||||
extern uint32_t UDD_Send(uint32_t ep, const void* data, uint32_t len);
|
||||
extern void UDD_Send8(uint32_t ep, uint8_t data );
|
||||
extern uint8_t UDD_Recv8(uint32_t ep);
|
||||
extern void UDD_Recv(uint32_t ep, uint8_t* data, uint32_t len);
|
||||
|
||||
extern void UDD_InitEndpoints(const uint32_t* eps_table, const uint32_t ul_eps_table_size);
|
||||
extern void UDD_InitControl(int end);
|
||||
extern uint32_t UDD_Init(void);
|
||||
extern void UDD_InitEP( uint32_t ul_ep, uint32_t ul_ep_cfg );
|
||||
|
||||
extern void UDD_Attach(void);
|
||||
extern void UDD_Detach(void);
|
||||
|
||||
extern void UDD_SetStack(void (*pf_isr)(void));
|
||||
extern void UDD_SetAddress(uint32_t addr);
|
||||
extern void UDD_Stall(void);
|
||||
extern uint32_t UDD_GetFrameNumber(void);
|
||||
|
||||
/*! \name Usual Types
|
||||
*/
|
||||
|
||||
//! @{
|
||||
|
||||
typedef unsigned char Bool; //!< Boolean.
|
||||
#ifndef __cplusplus
|
||||
#if !defined(__bool_true_false_are_defined)
|
||||
typedef unsigned char bool; //!< Boolean.
|
||||
#endif
|
||||
#endif
|
||||
typedef int8_t S8; //!< 8-bit signed integer.
|
||||
typedef uint8_t U8; //!< 8-bit unsigned integer.
|
||||
typedef int16_t S16; //!< 16-bit signed integer.
|
||||
typedef uint16_t U16; //!< 16-bit unsigned integer.
|
||||
typedef uint16_t le16_t;
|
||||
typedef uint16_t be16_t;
|
||||
typedef int32_t S32; //!< 32-bit signed integer.
|
||||
typedef uint32_t U32; //!< 32-bit unsigned integer.
|
||||
typedef uint32_t le32_t;
|
||||
typedef uint32_t be32_t;
|
||||
typedef int64_t S64; //!< 64-bit signed integer.
|
||||
typedef uint64_t U64; //!< 64-bit unsigned integer.
|
||||
typedef float F32; //!< 32-bit floating-point number.
|
||||
typedef double F64; //!< 64-bit floating-point number.
|
||||
typedef uint32_t iram_size_t;
|
||||
|
||||
//! @}
|
||||
|
||||
/*! \name Bit-Field Handling
|
||||
*/
|
||||
//! @{
|
||||
|
||||
/*! \brief Reads the bits of a value specified by a given bit-mask.
|
||||
*
|
||||
* \param value Value to read bits from.
|
||||
* \param mask Bit-mask indicating bits to read.
|
||||
*
|
||||
* \return Read bits.
|
||||
*/
|
||||
#define Rd_bits( value, mask) ((value) & (mask))
|
||||
|
||||
/*! \brief Writes the bits of a C lvalue specified by a given bit-mask.
|
||||
*
|
||||
* \param lvalue C lvalue to write bits to.
|
||||
* \param mask Bit-mask indicating bits to write.
|
||||
* \param bits Bits to write.
|
||||
*
|
||||
* \return Resulting value with written bits.
|
||||
*/
|
||||
#define Wr_bits(lvalue, mask, bits) ((lvalue) = ((lvalue) & ~(mask)) |\
|
||||
((bits ) & (mask)))
|
||||
|
||||
/*! \brief Tests the bits of a value specified by a given bit-mask.
|
||||
*
|
||||
* \param value Value of which to test bits.
|
||||
* \param mask Bit-mask indicating bits to test.
|
||||
*
|
||||
* \return \c 1 if at least one of the tested bits is set, else \c 0.
|
||||
*/
|
||||
#define Tst_bits( value, mask) (Rd_bits(value, mask) != 0)
|
||||
|
||||
/*! \brief Clears the bits of a C lvalue specified by a given bit-mask.
|
||||
*
|
||||
* \param lvalue C lvalue of which to clear bits.
|
||||
* \param mask Bit-mask indicating bits to clear.
|
||||
*
|
||||
* \return Resulting value with cleared bits.
|
||||
*/
|
||||
#define Clr_bits(lvalue, mask) ((lvalue) &= ~(mask))
|
||||
|
||||
/*! \brief Sets the bits of a C lvalue specified by a given bit-mask.
|
||||
*
|
||||
* \param lvalue C lvalue of which to set bits.
|
||||
* \param mask Bit-mask indicating bits to set.
|
||||
*
|
||||
* \return Resulting value with set bits.
|
||||
*/
|
||||
#define Set_bits(lvalue, mask) ((lvalue) |= (mask))
|
||||
|
||||
/*! \brief Toggles the bits of a C lvalue specified by a given bit-mask.
|
||||
*
|
||||
* \param lvalue C lvalue of which to toggle bits.
|
||||
* \param mask Bit-mask indicating bits to toggle.
|
||||
*
|
||||
* \return Resulting value with toggled bits.
|
||||
*/
|
||||
#define Tgl_bits(lvalue, mask) ((lvalue) ^= (mask))
|
||||
|
||||
/*! \brief Reads the bit-field of a value specified by a given bit-mask.
|
||||
*
|
||||
* \param value Value to read a bit-field from.
|
||||
* \param mask Bit-mask indicating the bit-field to read.
|
||||
*
|
||||
* \return Read bit-field.
|
||||
*/
|
||||
#define Rd_bitfield( value, mask) (Rd_bits( value, mask) >> ctz(mask))
|
||||
|
||||
/*! \brief Writes the bit-field of a C lvalue specified by a given bit-mask.
|
||||
*
|
||||
* \param lvalue C lvalue to write a bit-field to.
|
||||
* \param mask Bit-mask indicating the bit-field to write.
|
||||
* \param bitfield Bit-field to write.
|
||||
*
|
||||
* \return Resulting value with written bit-field.
|
||||
*/
|
||||
#define Wr_bitfield(lvalue, mask, bitfield) (Wr_bits(lvalue, mask, (U32)(bitfield) << ctz(mask)))
|
||||
|
||||
//! @}
|
||||
|
||||
/*! \name Token Paste
|
||||
*
|
||||
* Paste N preprocessing tokens together, these tokens being allowed to be \#defined.
|
||||
*
|
||||
* May be used only within macros with the tokens passed as arguments if the tokens are \#defined.
|
||||
*
|
||||
* For example, writing TPASTE2(U, WIDTH) within a macro \#defined by
|
||||
* UTYPE(WIDTH) and invoked as UTYPE(UL_WIDTH) with UL_WIDTH \#defined as 32 is
|
||||
* equivalent to writing U32.
|
||||
*/
|
||||
|
||||
//! @{
|
||||
|
||||
#define TPASTE2( a, b) a##b
|
||||
#define TPASTE3( a, b, c) a##b##c
|
||||
#define TPASTE4( a, b, c, d) a##b##c##d
|
||||
#define TPASTE5( a, b, c, d, e) a##b##c##d##e
|
||||
#define TPASTE6( a, b, c, d, e, f) a##b##c##d##e##f
|
||||
#define TPASTE7( a, b, c, d, e, f, g) a##b##c##d##e##f##g
|
||||
#define TPASTE8( a, b, c, d, e, f, g, h) a##b##c##d##e##f##g##h
|
||||
#define TPASTE9( a, b, c, d, e, f, g, h, i) a##b##c##d##e##f##g##h##i
|
||||
#define TPASTE10(a, b, c, d, e, f, g, h, i, j) a##b##c##d##e##f##g##h##i##j
|
||||
|
||||
//! @}
|
||||
|
||||
/*! \name Absolute Token Paste
|
||||
*
|
||||
* Paste N preprocessing tokens together, these tokens being allowed to be \#defined.
|
||||
*
|
||||
* No restriction of use if the tokens are \#defined.
|
||||
*
|
||||
* For example, writing ATPASTE2(U, UL_WIDTH) anywhere with UL_WIDTH \#defined
|
||||
* as 32 is equivalent to writing U32.
|
||||
*/
|
||||
|
||||
//! @{
|
||||
|
||||
#define ATPASTE2( a, b) TPASTE2( a, b)
|
||||
#define ATPASTE3( a, b, c) TPASTE3( a, b, c)
|
||||
#define ATPASTE4( a, b, c, d) TPASTE4( a, b, c, d)
|
||||
#define ATPASTE5( a, b, c, d, e) TPASTE5( a, b, c, d, e)
|
||||
#define ATPASTE6( a, b, c, d, e, f) TPASTE6( a, b, c, d, e, f)
|
||||
#define ATPASTE7( a, b, c, d, e, f, g) TPASTE7( a, b, c, d, e, f, g)
|
||||
#define ATPASTE8( a, b, c, d, e, f, g, h) TPASTE8( a, b, c, d, e, f, g, h)
|
||||
#define ATPASTE9( a, b, c, d, e, f, g, h, i) TPASTE9( a, b, c, d, e, f, g, h, i)
|
||||
#define ATPASTE10(a, b, c, d, e, f, g, h, i, j) TPASTE10(a, b, c, d, e, f, g, h, i, j)
|
||||
|
||||
//! @}
|
||||
|
||||
/*! \brief Counts the trailing zero bits of the given value considered as a 32-bit integer.
|
||||
*
|
||||
* \param u Value of which to count the trailing zero bits.
|
||||
*
|
||||
* \return The count of trailing zero bits in \a u.
|
||||
*/
|
||||
#if (defined __GNUC__) || (defined __CC_ARM)
|
||||
# define ctz(u) __builtin_ctz(u)
|
||||
#else
|
||||
# define ctz(u) ((u) & (1ul << 0) ? 0 : \
|
||||
(u) & (1ul << 1) ? 1 : \
|
||||
(u) & (1ul << 2) ? 2 : \
|
||||
(u) & (1ul << 3) ? 3 : \
|
||||
(u) & (1ul << 4) ? 4 : \
|
||||
(u) & (1ul << 5) ? 5 : \
|
||||
(u) & (1ul << 6) ? 6 : \
|
||||
(u) & (1ul << 7) ? 7 : \
|
||||
(u) & (1ul << 8) ? 8 : \
|
||||
(u) & (1ul << 9) ? 9 : \
|
||||
(u) & (1ul << 10) ? 10 : \
|
||||
(u) & (1ul << 11) ? 11 : \
|
||||
(u) & (1ul << 12) ? 12 : \
|
||||
(u) & (1ul << 13) ? 13 : \
|
||||
(u) & (1ul << 14) ? 14 : \
|
||||
(u) & (1ul << 15) ? 15 : \
|
||||
(u) & (1ul << 16) ? 16 : \
|
||||
(u) & (1ul << 17) ? 17 : \
|
||||
(u) & (1ul << 18) ? 18 : \
|
||||
(u) & (1ul << 19) ? 19 : \
|
||||
(u) & (1ul << 20) ? 20 : \
|
||||
(u) & (1ul << 21) ? 21 : \
|
||||
(u) & (1ul << 22) ? 22 : \
|
||||
(u) & (1ul << 23) ? 23 : \
|
||||
(u) & (1ul << 24) ? 24 : \
|
||||
(u) & (1ul << 25) ? 25 : \
|
||||
(u) & (1ul << 26) ? 26 : \
|
||||
(u) & (1ul << 27) ? 27 : \
|
||||
(u) & (1ul << 28) ? 28 : \
|
||||
(u) & (1ul << 29) ? 29 : \
|
||||
(u) & (1ul << 30) ? 30 : \
|
||||
(u) & (1ul << 31) ? 31 : \
|
||||
32)
|
||||
#endif
|
||||
|
||||
/*! \name Zero-Bit Counting
|
||||
*
|
||||
* Under GCC, __builtin_clz and __builtin_ctz behave like macros when
|
||||
* applied to constant expressions (values known at compile time), so they are
|
||||
* more optimized than the use of the corresponding assembly instructions and
|
||||
* they can be used as constant expressions e.g. to initialize objects having
|
||||
* static storage duration, and like the corresponding assembly instructions
|
||||
* when applied to non-constant expressions (values unknown at compile time), so
|
||||
* they are more optimized than an assembly periphrasis. Hence, clz and ctz
|
||||
* ensure a possible and optimized behavior for both constant and non-constant
|
||||
* expressions.
|
||||
*/
|
||||
//! @{
|
||||
|
||||
/*! \brief Counts the leading zero bits of the given value considered as a 32-bit integer.
|
||||
*
|
||||
* \param u Value of which to count the leading zero bits.
|
||||
*
|
||||
* \return The count of leading zero bits in \a u.
|
||||
*/
|
||||
#if (defined __GNUC__) || (defined __CC_ARM)
|
||||
# define clz(u) __builtin_clz(u)
|
||||
#elif (defined __ICCARM__)
|
||||
# define clz(u) __CLZ(u)
|
||||
#else
|
||||
# define clz(u) (((u) == 0) ? 32 : \
|
||||
((u) & (1ul << 31)) ? 0 : \
|
||||
((u) & (1ul << 30)) ? 1 : \
|
||||
((u) & (1ul << 29)) ? 2 : \
|
||||
((u) & (1ul << 28)) ? 3 : \
|
||||
((u) & (1ul << 27)) ? 4 : \
|
||||
((u) & (1ul << 26)) ? 5 : \
|
||||
((u) & (1ul << 25)) ? 6 : \
|
||||
((u) & (1ul << 24)) ? 7 : \
|
||||
((u) & (1ul << 23)) ? 8 : \
|
||||
((u) & (1ul << 22)) ? 9 : \
|
||||
((u) & (1ul << 21)) ? 10 : \
|
||||
((u) & (1ul << 20)) ? 11 : \
|
||||
((u) & (1ul << 19)) ? 12 : \
|
||||
((u) & (1ul << 18)) ? 13 : \
|
||||
((u) & (1ul << 17)) ? 14 : \
|
||||
((u) & (1ul << 16)) ? 15 : \
|
||||
((u) & (1ul << 15)) ? 16 : \
|
||||
((u) & (1ul << 14)) ? 17 : \
|
||||
((u) & (1ul << 13)) ? 18 : \
|
||||
((u) & (1ul << 12)) ? 19 : \
|
||||
((u) & (1ul << 11)) ? 20 : \
|
||||
((u) & (1ul << 10)) ? 21 : \
|
||||
((u) & (1ul << 9)) ? 22 : \
|
||||
((u) & (1ul << 8)) ? 23 : \
|
||||
((u) & (1ul << 7)) ? 24 : \
|
||||
((u) & (1ul << 6)) ? 25 : \
|
||||
((u) & (1ul << 5)) ? 26 : \
|
||||
((u) & (1ul << 4)) ? 27 : \
|
||||
((u) & (1ul << 3)) ? 28 : \
|
||||
((u) & (1ul << 2)) ? 29 : \
|
||||
((u) & (1ul << 1)) ? 30 : \
|
||||
31)
|
||||
#endif
|
||||
|
||||
/*! \name Mathematics
|
||||
*
|
||||
* The same considerations as for clz and ctz apply here but GCC does not
|
||||
* provide built-in functions to access the assembly instructions abs, min and
|
||||
* max and it does not produce them by itself in most cases, so two sets of
|
||||
* macros are defined here:
|
||||
* - Abs, Min and Max to apply to constant expressions (values known at
|
||||
* compile time);
|
||||
* - abs, min and max to apply to non-constant expressions (values unknown at
|
||||
* compile time), abs is found in stdlib.h.
|
||||
*/
|
||||
//! @{
|
||||
|
||||
/*! \brief Takes the absolute value of \a a.
|
||||
*
|
||||
* \param a Input value.
|
||||
*
|
||||
* \return Absolute value of \a a.
|
||||
*
|
||||
* \note More optimized if only used with values known at compile time.
|
||||
*/
|
||||
#define Abs(a) (((a) < 0 ) ? -(a) : (a))
|
||||
|
||||
/*! \brief Takes the minimal value of \a a and \a b.
|
||||
*
|
||||
* \param a Input value.
|
||||
* \param b Input value.
|
||||
*
|
||||
* \return Minimal value of \a a and \a b.
|
||||
*
|
||||
* \note More optimized if only used with values known at compile time.
|
||||
*/
|
||||
#define Min(a, b) (((a) < (b)) ? (a) : (b))
|
||||
|
||||
/*! \brief Takes the maximal value of \a a and \a b.
|
||||
*
|
||||
* \param a Input value.
|
||||
* \param b Input value.
|
||||
*
|
||||
* \return Maximal value of \a a and \a b.
|
||||
*
|
||||
* \note More optimized if only used with values known at compile time.
|
||||
*/
|
||||
#define Max(a, b) (((a) > (b)) ? (a) : (b))
|
||||
|
||||
// abs() is already defined by stdlib.h
|
||||
|
||||
/*! \brief Takes the minimal value of \a a and \a b.
|
||||
*
|
||||
* \param a Input value.
|
||||
* \param b Input value.
|
||||
*
|
||||
* \return Minimal value of \a a and \a b.
|
||||
*
|
||||
* \note More optimized if only used with values unknown at compile time.
|
||||
*/
|
||||
#define min(a, b) Min(a, b)
|
||||
|
||||
/*! \brief Takes the maximal value of \a a and \a b.
|
||||
*
|
||||
* \param a Input value.
|
||||
* \param b Input value.
|
||||
*
|
||||
* \return Maximal value of \a a and \a b.
|
||||
*
|
||||
* \note More optimized if only used with values unknown at compile time.
|
||||
*/
|
||||
#define max(a, b) Max(a, b)
|
||||
|
||||
//! @}
|
||||
|
||||
#endif /* USB_DEVICE_H_INCLUDED */
|
||||
70
digistump-sam/system/libsam/include/USB_host.h
Normal file
70
digistump-sam/system/libsam/include/USB_host.h
Normal file
@@ -0,0 +1,70 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef USB_HOST_H_INCLUDED
|
||||
#define USB_HOST_H_INCLUDED
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define tokSETUP UOTGHS_HSTPIPCFG_PTOKEN_SETUP
|
||||
#define tokIN UOTGHS_HSTPIPCFG_PTOKEN_IN
|
||||
#define tokOUT UOTGHS_HSTPIPCFG_PTOKEN_OUT
|
||||
#define tokINHS UOTGHS_HSTPIPCFG_PTOKEN_IN
|
||||
#define tokOUTHS UOTGHS_HSTPIPCFG_PTOKEN_OUT
|
||||
|
||||
//! \brief Device speed
|
||||
/*typedef enum {
|
||||
UHD_SPEED_LOW = 0,
|
||||
UHD_SPEED_FULL = 1,
|
||||
UHD_SPEED_HIGH = 2,
|
||||
} uhd_speed_t;*/
|
||||
|
||||
//! States of USBB interface
|
||||
typedef enum {
|
||||
UHD_STATE_NO_VBUS = 0,
|
||||
UHD_STATE_DISCONNECTED = 1,
|
||||
UHD_STATE_CONNECTED = 2,
|
||||
UHD_STATE_ERROR = 3,
|
||||
} uhd_vbus_state_t;
|
||||
|
||||
//extern uhd_speed_t uhd_get_speed(void);
|
||||
|
||||
extern void UHD_SetStack(void (*pf_isr)(void));
|
||||
extern void UHD_Init(void);
|
||||
extern void UHD_BusReset(void);
|
||||
extern uhd_vbus_state_t UHD_GetVBUSState(void);
|
||||
extern uint32_t UHD_Pipe0_Alloc(uint32_t ul_add, uint32_t ul_ep_size);
|
||||
extern uint32_t UHD_Pipe_Alloc(uint32_t ul_dev_addr, uint32_t ul_dev_ep, uint32_t ul_type, uint32_t ul_dir, uint32_t ul_maxsize, uint32_t ul_interval, uint32_t ul_nb_bank);
|
||||
extern void UHD_Pipe_Free(uint32_t ul_pipe);
|
||||
extern uint32_t UHD_Pipe_Read(uint32_t ul_pipe, uint32_t ul_size, uint8_t* data);
|
||||
extern void UHD_Pipe_Write(uint32_t ul_pipe, uint32_t ul_size, uint8_t* data);
|
||||
extern void UHD_Pipe_Send(uint32_t ul_pipe, uint32_t ul_token_type);
|
||||
extern uint32_t UHD_Pipe_Is_Transfer_Complete(uint32_t ul_pipe, uint32_t ul_token_type);
|
||||
|
||||
#endif /* USB_HOST_H_INCLUDED */
|
||||
248
digistump-sam/system/libsam/include/adc.h
Normal file
248
digistump-sam/system/libsam/include/adc.h
Normal file
@@ -0,0 +1,248 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef ADC_H_INCLUDED
|
||||
#define ADC_H_INCLUDED
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
/// @cond 0
|
||||
/**INDENT-OFF**/
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**INDENT-ON**/
|
||||
/// @endcond
|
||||
|
||||
/* The max adc sample freq definition*/
|
||||
#define ADC_FREQ_MAX 20000000
|
||||
/* The min adc sample freq definition*/
|
||||
#define ADC_FREQ_MIN 1000000
|
||||
/* The normal adc startup time*/
|
||||
#define ADC_STARTUP_NORM 40
|
||||
/* The fast adc startup time*/
|
||||
#define ADC_STARTUP_FAST 12
|
||||
|
||||
/* Definitions for ADC resolution */
|
||||
#if SAM3S_SERIES || SAM4S_SERIES || SAM3XA_SERIES
|
||||
enum adc_resolution_t {
|
||||
ADC_10_BITS = ADC_MR_LOWRES_BITS_10, /* ADC 10-bit resolution */
|
||||
ADC_12_BITS = ADC_MR_LOWRES_BITS_12 /* ADC 12-bit resolution */
|
||||
};
|
||||
#elif SAM3N_SERIES
|
||||
enum adc_resolution_t {
|
||||
ADC_8_BITS = ADC_MR_LOWRES_BITS_8, /* ADC 8-bit resolution */
|
||||
ADC_10_BITS = ADC_MR_LOWRES_BITS_10 /* ADC 10-bit resolution */
|
||||
} ;
|
||||
#elif SAM3U_SERIES
|
||||
enum adc_resolution_t {
|
||||
ADC_8_BITS = ADC_MR_LOWRES_BITS_8, /* ADC 8-bit resolution */
|
||||
ADC_10_BITS = ADC12B_MR_LOWRES_BITS_10, /* ADC 10-bit resolution */
|
||||
ADC_12_BITS = ADC12B_MR_LOWRES_BITS_12 /* ADC 12-bit resolution */
|
||||
} ;
|
||||
#endif
|
||||
|
||||
/* Definitions for ADC trigger */
|
||||
enum adc_trigger_t {
|
||||
ADC_TRIG_SW = ADC_MR_TRGEN_DIS, /* Starting a conversion is only possible by software. */
|
||||
ADC_TRIG_EXT = ((ADC_MR_TRGSEL_ADC_TRIG0 << ADC_MR_TRGSEL_Pos) &
|
||||
ADC_MR_TRGSEL_Msk) | ADC_MR_TRGEN, /* External trigger */
|
||||
ADC_TRIG_TIO_CH_0 = (ADC_MR_TRGSEL_ADC_TRIG1 & ADC_MR_TRGSEL_Msk) |
|
||||
ADC_MR_TRGEN, /* TIO Output of the Timer Counter Channel 0 */
|
||||
ADC_TRIG_TIO_CH_1 = (ADC_MR_TRGSEL_ADC_TRIG2 & ADC_MR_TRGSEL_Msk) |
|
||||
ADC_MR_TRGEN, /* TIO Output of the Timer Counter Channel 1 */
|
||||
ADC_TRIG_TIO_CH_2 = (ADC_MR_TRGSEL_ADC_TRIG3 & ADC_MR_TRGSEL_Msk) |
|
||||
ADC_MR_TRGEN, /* TIO Output of the Timer Counter Channel 2 */
|
||||
#if SAM3S_SERIES || SAM4S_SERIES || SAM3XA_SERIES || SAM3U_SERIES
|
||||
ADC_TRIG_PWM_EVENT_LINE_0 = (ADC_MR_TRGSEL_ADC_TRIG4 & ADC_MR_TRGSEL_Msk) |
|
||||
ADC_MR_TRGEN, /* PWM Event Line 0 */
|
||||
ADC_TRIG_PWM_EVENT_LINE_1 = (ADC_MR_TRGSEL_ADC_TRIG5 & ADC_MR_TRGSEL_Msk) |
|
||||
ADC_MR_TRGEN /* PWM Event Line 1 */
|
||||
#endif
|
||||
} ;
|
||||
|
||||
#if SAM3S_SERIES || SAM4S_SERIES || SAM3N_SERIES || SAM3XA_SERIES
|
||||
/* Definitions for ADC channel number */
|
||||
enum adc_channel_num_t {
|
||||
ADC_CHANNEL_0 = 0,
|
||||
ADC_CHANNEL_1 = 1,
|
||||
ADC_CHANNEL_2 = 2,
|
||||
ADC_CHANNEL_3 = 3,
|
||||
ADC_CHANNEL_4 = 4,
|
||||
ADC_CHANNEL_5 = 5,
|
||||
ADC_CHANNEL_6 = 6,
|
||||
ADC_CHANNEL_7 = 7,
|
||||
ADC_CHANNEL_8 = 8,
|
||||
ADC_CHANNEL_9 = 9,
|
||||
ADC_CHANNEL_10 = 10,
|
||||
ADC_CHANNEL_11 = 11,
|
||||
ADC_CHANNEL_12 = 12,
|
||||
ADC_CHANNEL_13 = 13,
|
||||
ADC_CHANNEL_14 = 14,
|
||||
ADC_TEMPERATURE_SENSOR = 15,
|
||||
} ;
|
||||
#elif SAM3U_SERIES
|
||||
/* Definitions for ADC channel number */
|
||||
enum adc_channel_num_t {
|
||||
ADC_CHANNEL_0 = 0,
|
||||
ADC_CHANNEL_1 = 1,
|
||||
ADC_CHANNEL_2 = 2,
|
||||
ADC_CHANNEL_3 = 3,
|
||||
ADC_CHANNEL_4 = 4,
|
||||
ADC_CHANNEL_5 = 5,
|
||||
ADC_CHANNEL_6 = 6,
|
||||
ADC_CHANNEL_7 = 7,
|
||||
} ;
|
||||
#endif
|
||||
/* Definitions for ADC gain value */
|
||||
enum adc_gainvalue_t{
|
||||
ADC_GAINVALUE_0 = 0,
|
||||
ADC_GAINVALUE_1 = 1,
|
||||
ADC_GAINVALUE_2 = 2,
|
||||
ADC_GAINVALUE_3 = 3
|
||||
};
|
||||
/* Definitions for ADC analog settling time */
|
||||
#if SAM3S_SERIES || SAM4S_SERIES || SAM3XA_SERIES
|
||||
enum adc_settling_time_t{
|
||||
ADC_SETTLING_TIME_0 = ADC_MR_SETTLING_AST3,
|
||||
ADC_SETTLING_TIME_1 = ADC_MR_SETTLING_AST5,
|
||||
ADC_SETTLING_TIME_2 = ADC_MR_SETTLING_AST9,
|
||||
ADC_SETTLING_TIME_3 = ADC_MR_SETTLING_AST17
|
||||
};
|
||||
#endif
|
||||
|
||||
#if SAM3S_SERIES || SAM4S_SERIES || SAM3N_SERIES || SAM3XA_SERIES
|
||||
uint32_t adc_init(Adc *p_adc, const uint32_t ul_mck,
|
||||
const uint32_t ul_adc_clock, const uint8_t uc_startup);
|
||||
void adc_configure_trigger(Adc *p_adc, const enum adc_trigger_t trigger,
|
||||
const uint8_t uc_freerun);
|
||||
void adc_configure_power_save(Adc *p_adc, const uint8_t uc_sleep, const uint8_t uc_fwup);
|
||||
void adc_configure_sequence(Adc *p_adc, const enum adc_channel_num_t ch_list[],
|
||||
const uint8_t uc_num);
|
||||
void adc_enable_tag(Adc *p_adc);
|
||||
void adc_disable_tag(Adc *p_adc);
|
||||
enum adc_channel_num_t adc_get_tag(const Adc *p_adc);
|
||||
void adc_start_sequencer(Adc *p_adc);
|
||||
void adc_stop_sequencer(Adc *p_adc);
|
||||
void adc_set_comparison_mode(Adc *p_adc, const uint8_t uc_mode);
|
||||
uint32_t adc_get_comparison_mode(const Adc *p_adc);
|
||||
void adc_set_comparison_window(Adc *p_adc, const uint16_t us_low_threshold,
|
||||
const uint16_t us_high_threshold);
|
||||
void adc_set_comparison_channel(Adc *p_adc, const enum adc_channel_num_t channel);
|
||||
void adc_set_writeprotect(Adc *p_adc, const uint32_t ul_enable);
|
||||
uint32_t adc_get_writeprotect_status(const Adc *p_adc);
|
||||
void adc_check(Adc* p_adc, const uint32_t ul_mck);
|
||||
uint32_t adc_get_overrun_status(const Adc *p_adc);
|
||||
#elif SAM3U_SERIES
|
||||
uint32_t adc_init(Adc * p_adc, const uint32_t ul_mck, const uint32_t ul_adc_clock,
|
||||
const uint32_t ul_startuptime);
|
||||
void adc_configure_trigger(Adc *p_adc, const enum adc_trigger_t trigger);
|
||||
void adc_configure_power_save(Adc *p_adc, const uint8_t uc_sleep);
|
||||
#endif
|
||||
|
||||
void adc_set_resolution(Adc *p_adc, const enum adc_resolution_t resolution);
|
||||
void adc_start(Adc *p_adc);
|
||||
void adc_stop(Adc *p_adc);
|
||||
void adc_enable_channel(Adc *p_adc, const enum adc_channel_num_t adc_ch);
|
||||
void adc_disable_channel(Adc *p_adc, const enum adc_channel_num_t adc_ch);
|
||||
void adc_enable_all_channel(Adc *p_adc);
|
||||
void adc_disable_all_channel(Adc *p_adc);
|
||||
uint32_t adc_get_channel_status(const Adc *p_adc, const enum adc_channel_num_t adc_ch);
|
||||
uint32_t adc_get_channel_value(const Adc *p_adc,const enum adc_channel_num_t adc_ch);
|
||||
uint32_t adc_get_latest_value(const Adc *p_adc);
|
||||
uint32_t adc_get_actual_adc_clock(const Adc *p_adc, const uint32_t ul_mck);
|
||||
void adc_enable_interrupt(Adc *p_adc, const uint32_t ul_source);
|
||||
void adc_disable_interrupt(Adc *p_adc, const uint32_t ul_source);
|
||||
uint32_t adc_get_status(const Adc *p_adc);
|
||||
uint32_t adc_get_interrupt_mask(const Adc *p_adc);
|
||||
Pdc *adc_get_pdc_base(const Adc *p_adc);
|
||||
|
||||
#if SAM3S_SERIES || SAM4S_SERIES || SAM3XA_SERIES
|
||||
void adc_configure_timing(Adc *p_adc, const uint8_t uc_tracking,
|
||||
const enum adc_settling_time_t settling, const uint8_t uc_transfer);
|
||||
void adc_enable_anch( Adc *p_adc );
|
||||
void adc_disable_anch( Adc *p_adc );
|
||||
void adc_enable_channel_differential_input(Adc *p_adc, const enum adc_channel_num_t channel);
|
||||
void adc_disable_channel_differential_input(Adc *p_adc, const enum adc_channel_num_t channel);
|
||||
void adc_enable_channel_input_offset(Adc *p_adc, const enum adc_channel_num_t channel);
|
||||
void adc_disable_channel_input_offset(Adc *p_adc, const enum adc_channel_num_t channel);
|
||||
void adc_set_channel_input_gain(Adc *p_adc, const enum adc_channel_num_t channel,
|
||||
const enum adc_gainvalue_t uc_gain);
|
||||
void adc_set_bias_current(Adc *p_adc, const uint8_t uc_ibctl);
|
||||
void adc_enable_ts(Adc *p_adc);
|
||||
void adc_disable_ts(Adc *p_adc);
|
||||
#elif SAM3N_SERIES
|
||||
void adc_configure_timing(Adc *p_adc, const uint8_t uc_tracking);
|
||||
#elif SAM3U_SERIES
|
||||
void adc_configure_timing(Adc *p_adc, const uint32_t ul_sh);
|
||||
#endif
|
||||
|
||||
#if SAM3SD8_SERIES || SAM4S_SERIES
|
||||
void adc_set_calibmode(Adc *p_adc);
|
||||
#endif
|
||||
|
||||
#if SAM3U_SERIES
|
||||
uint32_t adc12b_init(Adc12b *p_adc, const uint32_t ul_mck, const uint32_t ul_adc_clock,
|
||||
const uint32_t ul_startuptime, const uint32_t ul_offmode_startuptime);
|
||||
void adc12b_set_resolution(Adc12b *p_adc, const enum adc_resolution_t resolution);
|
||||
void adc12b_configure_trigger(Adc12b *p_adc, const enum adc_trigger_t trigger);
|
||||
void adc12b_configure_power_save(Adc12b *p_adc, const uint8_t uc_sleep, const uint8_t uc_offmode);
|
||||
void adc12b_configure_timing(Adc12b *p_adc, const uint32_t ul_sh);
|
||||
void adc12b_start(Adc12b *p_adc);
|
||||
void adc12b_stop(Adc12b *p_adc);
|
||||
void adc12b_enable_channel(Adc12b *p_adc, const enum adc_channel_num_t adc_ch);
|
||||
void adc12b_disable_channel(Adc12b *p_adc, const enum adc_channel_num_t adc_ch);
|
||||
void adc12b_enable_all_channel(Adc12b *p_adc);
|
||||
void adc12b_disable_all_channel(Adc12b *p_adc);
|
||||
uint32_t adc12b_get_channel_status(const Adc12b *p_adc,const enum adc_channel_num_t adc_ch);
|
||||
uint32_t adc12b_get_channel_value(const Adc12b *p_adc, const enum adc_channel_num_t adc_ch);
|
||||
uint32_t adc12b_get_latest_value(const Adc12b *p_adc);
|
||||
void adc12b_enable_differential_input(Adc12b *p_adc);
|
||||
void adc12b_disable_differential_input(Adc12b *p_adc);
|
||||
void adc12b_enable_input_offset(Adc12b *p_adc);
|
||||
void adc12b_disable_input_offset(Adc12b *p_adc);
|
||||
void adc12b_set_input_gain(Adc12b *p_adc, const enum adc_gainvalue_t uc_gain);
|
||||
uint32_t adc12b_get_actual_adc_clock(const Adc12b *p_adc, const uint32_t ul_mck);
|
||||
void adc12b_enable_interrupt(Adc12b *p_adc, const uint32_t ul_source);
|
||||
void adc12b_disable_interrupt(Adc12b *p_adc, const uint32_t ul_source);
|
||||
uint32_t adc12b_get_interrupt_mask(const Adc12b *p_adc);
|
||||
uint32_t adc12b_get_status(const Adc12b *p_adc);
|
||||
void adc12b_set_bias_current(Adc12b *p_adc, const uint8_t uc_ibctl);
|
||||
Pdc *adc12b_get_pdc_base(const Adc12b *p_adc);
|
||||
#endif
|
||||
|
||||
/// @cond 0
|
||||
/**INDENT-OFF**/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
/**INDENT-ON**/
|
||||
/// @endcond
|
||||
|
||||
#endif /* ADC_H_INCLUDED */
|
||||
492
digistump-sam/system/libsam/include/can.h
Normal file
492
digistump-sam/system/libsam/include/can.h
Normal file
@@ -0,0 +1,492 @@
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* \brief Controller Area Network (CAN) driver module for SAM.
|
||||
*
|
||||
* Copyright (c) 2011 - 2012 Atmel Corporation. All rights reserved.
|
||||
*
|
||||
* \asf_license_start
|
||||
*
|
||||
* \page License
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of Atmel may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* 4. This software may only be redistributed and used in connection with an
|
||||
* Atmel microcontroller product.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* \asf_license_stop
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef CAN_H_INCLUDED
|
||||
#define CAN_H_INCLUDED
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
/** @cond 0 */
|
||||
/**INDENT-OFF**/
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**INDENT-ON**/
|
||||
/** @endcond */
|
||||
|
||||
/** Define the Mailbox mask for eight mailboxes. */
|
||||
#define GLOBAL_MAILBOX_MASK 0x000000ff
|
||||
|
||||
/** Disable all interrupt mask */
|
||||
#define CAN_DISABLE_ALL_INTERRUPT_MASK 0xffffffff
|
||||
|
||||
/** Define the typical baudrate for CAN communication in KHz. */
|
||||
#define CAN_BPS_1000K 1000
|
||||
#define CAN_BPS_800K 800
|
||||
#define CAN_BPS_500K 500
|
||||
#define CAN_BPS_250K 250
|
||||
#define CAN_BPS_125K 125
|
||||
#define CAN_BPS_50K 50
|
||||
#define CAN_BPS_25K 25
|
||||
#define CAN_BPS_10K 10
|
||||
#define CAN_BPS_5K 5
|
||||
|
||||
/** Define the mailbox mode. */
|
||||
#define CAN_MB_DISABLE_MODE 0
|
||||
#define CAN_MB_RX_MODE 1
|
||||
#define CAN_MB_RX_OVER_WR_MODE 2
|
||||
#define CAN_MB_TX_MODE 3
|
||||
#define CAN_MB_CONSUMER_MODE 4
|
||||
#define CAN_MB_PRODUCER_MODE 5
|
||||
|
||||
/** Define CAN mailbox transfer status code. */
|
||||
#define CAN_MAILBOX_TRANSFER_OK 0 //! Read from or write into mailbox successfully.
|
||||
#define CAN_MAILBOX_NOT_READY 0x01 //! Receiver is empty or transmitter is busy.
|
||||
#define CAN_MAILBOX_RX_OVER 0x02 //! Message overwriting happens or there're messages lost in different receive modes.
|
||||
#define CAN_MAILBOX_RX_NEED_RD_AGAIN 0x04 //! Application needs to re-read the data register in Receive with Overwrite mode.
|
||||
|
||||
/** Define the struct for CAN message mailbox. */
|
||||
typedef struct {
|
||||
uint32_t ul_mb_idx;
|
||||
uint8_t uc_obj_type; //! Mailbox object type, one of the six different objects.
|
||||
uint8_t uc_id_ver; //! 0 stands for standard frame, 1 stands for extended frame.
|
||||
uint8_t uc_length; //! Received data length or transmitted data length.
|
||||
uint8_t uc_tx_prio; //! Mailbox priority, no effect in receive mode.
|
||||
uint32_t ul_status; //! Mailbox status register value.
|
||||
uint32_t ul_id_msk; //! No effect in transmit mode.
|
||||
uint32_t ul_id; //! Received frame ID or the frame ID to be transmitted.
|
||||
uint32_t ul_fid; //! Family ID.
|
||||
uint32_t ul_datal;
|
||||
uint32_t ul_datah;
|
||||
} can_mb_conf_t;
|
||||
|
||||
/**
|
||||
* \defgroup sam_driver_can_group Controller Area Network (CAN) Driver
|
||||
*
|
||||
* See \ref sam_can_quickstart.
|
||||
*
|
||||
* \par Purpose
|
||||
*
|
||||
* The CAN controller provides all the features required to implement
|
||||
* the serial communication protocol CAN defined by Robert Bosch GmbH,
|
||||
* the CAN specification. This is a driver for configuration, enabling,
|
||||
* disabling and use of the CAN peripheral.
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
uint32_t can_init(Can *p_can, uint32_t ul_mck, uint32_t ul_baudrate);
|
||||
|
||||
void can_enable(Can *p_can);
|
||||
void can_disable(Can *p_can);
|
||||
|
||||
void can_disable_low_power_mode(Can *p_can);
|
||||
void can_enable_low_power_mode(Can *p_can);
|
||||
|
||||
void can_disable_autobaud_listen_mode(Can *p_can);
|
||||
void can_enable_autobaud_listen_mode(Can *p_can);
|
||||
|
||||
void can_disable_overload_frame(Can *p_can);
|
||||
void can_enable_overload_frame(Can *p_can);
|
||||
|
||||
void can_set_timestamp_capture_point(Can *p_can, uint32_t ul_flag);
|
||||
|
||||
void can_disable_time_triggered_mode(Can *p_can);
|
||||
void can_enable_time_triggered_mode(Can *p_can);
|
||||
|
||||
void can_disable_timer_freeze(Can *p_can);
|
||||
void can_enable_timer_freeze(Can *p_can);
|
||||
|
||||
void can_disable_tx_repeat(Can *p_can);
|
||||
void can_enable_tx_repeat(Can *p_can);
|
||||
|
||||
void can_set_rx_sync_stage(Can *p_can, uint32_t ul_stage);
|
||||
|
||||
void can_enable_interrupt(Can *p_can, uint32_t dw_mask);
|
||||
void can_disable_interrupt(Can *p_can, uint32_t dw_mask);
|
||||
|
||||
uint32_t can_get_interrupt_mask(Can *p_can);
|
||||
|
||||
uint32_t can_get_status(Can *p_can);
|
||||
|
||||
uint32_t can_get_internal_timer_value(Can *p_can);
|
||||
|
||||
uint32_t can_get_timestamp_value(Can *p_can);
|
||||
|
||||
uint8_t can_get_tx_error_cnt(Can *p_can);
|
||||
uint8_t can_get_rx_error_cnt(Can *p_can);
|
||||
|
||||
void can_reset_internal_timer(Can *p_can);
|
||||
|
||||
void can_global_send_transfer_cmd(Can *p_can, uint8_t uc_mask);
|
||||
void can_global_send_abort_cmd(Can *p_can, uint8_t uc_mask);
|
||||
|
||||
/*
|
||||
* Mailbox functions
|
||||
*/
|
||||
void can_mailbox_set_timemark(Can *p_can, uint8_t uc_index, uint16_t us_cnt);
|
||||
uint32_t can_mailbox_get_status(Can *p_can, uint8_t uc_index);
|
||||
void can_mailbox_send_transfer_cmd(Can *p_can, uint8_t uc_index);
|
||||
void can_mailbox_send_abort_cmd(Can *p_can, uint8_t uc_index);
|
||||
void can_mailbox_init(Can *p_can, can_mb_conf_t *p_mailbox);
|
||||
uint32_t can_mailbox_read(Can *p_can, can_mb_conf_t *p_mailbox);
|
||||
uint32_t can_mailbox_write(Can *p_can, can_mb_conf_t *p_mailbox);
|
||||
uint32_t can_mailbox_tx_remote_frame(Can *p_can, can_mb_conf_t *p_mailbox);
|
||||
void can_reset_all_mailbox(Can *p_can);
|
||||
|
||||
// from wilfredo
|
||||
uint32_t can_reset_mailbox_data(can_mb_conf_t *p_mailbox);
|
||||
|
||||
/** @} */
|
||||
|
||||
/** @cond 0 */
|
||||
/**INDENT-OFF**/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
/**INDENT-ON**/
|
||||
/** @endcond */
|
||||
|
||||
/**
|
||||
* \page sam_can_quickstart Quickstart guide for SAM CAN module.
|
||||
*
|
||||
* This is the quickstart guide for the \ref sam_drivers_can_group "SAM CAN module",
|
||||
* with step-by-step instructions on how to configure and use the drivers in a
|
||||
* selection of use cases.
|
||||
*
|
||||
* The use cases contain several code fragments. The code fragments in the
|
||||
* steps for setup can be copied into a custom initialization function, while
|
||||
* the steps for usage can be copied into, e.g., the main application function.
|
||||
*
|
||||
* \section can_basic_use_case Basic use case
|
||||
* In this basic use case, as CAN module needs to work in network, two CAN modules
|
||||
* need to be configured. CAN0 mailbox 0 is configured as transmitter, and CAN1 mailbox 0
|
||||
* is configured as receiver. The communication baudrate is 1Mbit/s.
|
||||
*
|
||||
* \section can_basic_use_case_setup Setup steps
|
||||
*
|
||||
* \subsection can_basic_use_case_setup_prereq Prerequisites
|
||||
* - \ref group_pmc "Power Management Controller driver"
|
||||
* - \ref group_sn65hvd234_transceiver "CAN transceiver driver"
|
||||
*
|
||||
* \subsection can_basic_use_case_setup_code Example code
|
||||
* Add to application initialization:
|
||||
* \code
|
||||
* can_mb_conf_t can0_mailbox;
|
||||
* can_mb_conf_t can1_mailbox;
|
||||
*
|
||||
* pmc_enable_periph_clk(ID_CAN0);
|
||||
* pmc_enable_periph_clk(ID_CAN1);
|
||||
*
|
||||
* can_init(CAN0, ul_sysclk, CAN_BPS_1000K);
|
||||
* can_init(CAN1, ul_sysclk, CAN_BPS_1000K);
|
||||
*
|
||||
* can_reset_all_mailbox(CAN0);
|
||||
* can_reset_all_mailbox(CAN1);
|
||||
*
|
||||
* can1_mailbox.ul_mb_idx = 0;
|
||||
* can1_mailbox.uc_obj_type = CAN_MB_RX_MODE;
|
||||
* can1_mailbox.ul_id_msk = CAN_MAM_MIDvA_Msk | CAN_MAM_MIDvB_Msk;
|
||||
* can1_mailbox.ul_id = CAN_MID_MIDvA(0x07);
|
||||
* can_mailbox_init(CAN1, &can1_mailbox);
|
||||
*
|
||||
* can0_mailbox.ul_mb_idx = 0;
|
||||
* can0_mailbox.uc_obj_type = CAN_MB_TX_MODE;
|
||||
* can0_mailbox.uc_tx_prio = 15;
|
||||
* can0_mailbox.uc_id_ver = 0;
|
||||
* can0_mailbox.ul_id_msk = 0;
|
||||
* can_mailbox_init(CAN0, &can0_mailbox);
|
||||
*
|
||||
* can0_mailbox.ul_id = CAN_MID_MIDvA(0x07);
|
||||
* can0_mailbox.ul_datal = 0x12345678;
|
||||
* can0_mailbox.ul_datah = 0x87654321;
|
||||
* can0_mailbox.uc_length = 8;
|
||||
* can_mailbox_write(CAN0, &can0_mailbox);
|
||||
* \endcode
|
||||
*
|
||||
* \subsection can_basic_use_case_setup_flow Workflow
|
||||
* -# Define the CAN0 and CAN1 Transfer mailbox structure:
|
||||
* - \code
|
||||
* can_mb_conf_t can0_mailbox;
|
||||
* can_mb_conf_t can1_mailbox;
|
||||
* \endcode
|
||||
* -# Enable the module clock for CAN0 and CAN1:
|
||||
* - \code
|
||||
* pmc_enable_periph_clk(ID_CAN0);
|
||||
* pmc_enable_periph_clk(ID_CAN1);
|
||||
* \endcode
|
||||
* -# Initialize CAN0 and CAN1, baudrate is 1Mb/s:
|
||||
* - \code
|
||||
* can_init(CAN0, ul_sysclk, CAN_BPS_1000K);
|
||||
* can_init(CAN1, ul_sysclk, CAN_BPS_1000K);
|
||||
* \endcode
|
||||
* - \note The CAN transceiver should be configured before initializing the CAN module.
|
||||
* -# Reset all CAN0 and CAN1 mailboxes:
|
||||
* - \code
|
||||
* can_reset_all_mailbox(CAN0);
|
||||
* can_reset_all_mailbox(CAN1);
|
||||
* \endcode
|
||||
* -# Initialize CAN1 mailbox 0 as receiver, frame ID is 0x07:
|
||||
* - \code
|
||||
* can1_mailbox.ul_mb_idx = 0;
|
||||
* can1_mailbox.uc_obj_type = CAN_MB_RX_MODE;
|
||||
* can1_mailbox.ul_id_msk = CAN_MAM_MIDvA_Msk | CAN_MAM_MIDvB_Msk;
|
||||
* can1_mailbox.ul_id = CAN_MID_MIDvA(0x07);
|
||||
* can_mailbox_init(CAN1, &can1_mailbox);
|
||||
* \endcode
|
||||
* -# Initialize CAN0 mailbox 0 as transmitter, transmit priority is 15:
|
||||
* - \code
|
||||
* can0_mailbox.ul_mb_idx = 0;
|
||||
* can0_mailbox.uc_obj_type = CAN_MB_TX_MODE;
|
||||
* can0_mailbox.uc_tx_prio = 15;
|
||||
* can0_mailbox.uc_id_ver = 0;
|
||||
* can0_mailbox.ul_id_msk = 0;
|
||||
* can_mailbox_init(CAN0, &can0_mailbox);
|
||||
* \endcode
|
||||
* -# Prepare transmit ID, data and data length in CAN0 mailbox 0:
|
||||
* - \code
|
||||
* can0_mailbox.ul_id = CAN_MID_MIDvA(0x07);
|
||||
* can0_mailbox.ul_datal = 0x12345678;
|
||||
* can0_mailbox.ul_datah = 0x87654321;
|
||||
* can0_mailbox.uc_length = 8;
|
||||
* can_mailbox_write(CAN0, &can0_mailbox);
|
||||
* \endcode
|
||||
*
|
||||
* \section can_basic_use_case_usage Usage steps
|
||||
*
|
||||
* \subsection can_basic_use_case_usage_code Example code
|
||||
* Add to, e.g., main loop in application C-file:
|
||||
* \code
|
||||
* can_global_send_transfer_cmd(CAN0, CAN_TCR_MB0);
|
||||
*
|
||||
* while (!(can_mailbox_get_status(CAN1, 0) & CAN_MSR_MRDY)) {
|
||||
* }
|
||||
*
|
||||
* can_mailbox_read(CAN1, &can1_mailbox);
|
||||
* \endcode
|
||||
*
|
||||
* \subsection can_basic_use_case_usage_flow Workflow
|
||||
* -# Send out data in CAN0 mailbox 0:
|
||||
* - \code can_global_send_transfer_cmd(CAN0, CAN_TCR_MB0); \endcode
|
||||
* -# Wait for CAN1 mailbox 0 to receive the data:
|
||||
* - \code
|
||||
* while (!(can_mailbox_get_status(CAN1, 0) & CAN_MSR_MRDY)) {
|
||||
* }
|
||||
* \endcode
|
||||
* -# Read the received data from CAN1 mailbox 0:
|
||||
* - \code can_mailbox_read(CAN1, &can1_mailbox); \endcode
|
||||
*
|
||||
* \section can_use_cases Advanced use cases
|
||||
* For more advanced use of the CAN driver, see the following use cases:
|
||||
* - \subpage can_use_case_1 : Two CAN modules work in PRODUCER and CONSUMER mode
|
||||
* respectively, use CAN interrupt handler to check whether the communication has been
|
||||
* completed.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \page can_use_case_1 Use case #1
|
||||
*
|
||||
* In this use case, CAN0 mailbox 0 works in PRODUCER mode, and CAN1 mailbox 0
|
||||
* works in CONSUMER mode. While CAN1 mailbox 0 receives a data frame from the bus,
|
||||
* an interrupt is triggered.
|
||||
*
|
||||
* \section can_use_case_1_setup Setup steps
|
||||
*
|
||||
* \subsection can_basic_use_case_setup_prereq Prerequisites
|
||||
* - \ref group_pmc "Power Management Controller driver"
|
||||
* - \ref group_sn65hvd234_transceiver "CAN transceiver driver"
|
||||
*
|
||||
* \subsection can_use_case_1_setup_code Example code
|
||||
* Add to application C-file:
|
||||
* \code
|
||||
* can_mb_conf_t can0_mailbox;
|
||||
* can_mb_conf_t can1_mailbox;
|
||||
* volatile uint32_t g_ul_recv_status = 0;
|
||||
* \endcode
|
||||
*
|
||||
* \code
|
||||
* void CAN1_Handler(void)
|
||||
* {
|
||||
* uint32_t ul_status;
|
||||
*
|
||||
* ul_status = can_mailbox_get_status(CAN1, 0);
|
||||
* if ((ul_status & CAN_MSR_MRDY) == CAN_MSR_MRDY) {
|
||||
* can1_mailbox.ul_mb_idx = 0;
|
||||
* can1_mailbox.ul_status = ul_status;
|
||||
* can_mailbox_read(CAN1, &can1_mailbox);
|
||||
* g_ul_recv_status = 1;
|
||||
* }
|
||||
* }
|
||||
* \endcode
|
||||
*
|
||||
* \code
|
||||
* pmc_enable_periph_clk(ID_CAN0);
|
||||
* pmc_enable_periph_clk(ID_CAN1);
|
||||
*
|
||||
* can_init(CAN0, ul_sysclk, CAN_BPS_1000K);
|
||||
* can_init(CAN1, ul_sysclk, CAN_BPS_1000K);
|
||||
*
|
||||
* can_reset_all_mailbox(CAN0);
|
||||
* can_reset_all_mailbox(CAN1);
|
||||
*
|
||||
* can0_mailbox.ul_mb_idx = 0;
|
||||
* can0_mailbox.uc_obj_type = CAN_MB_PRODUCER_MODE;
|
||||
* can0_mailbox.ul_id_msk = 0;
|
||||
* can0_mailbox.ul_id = CAN_MID_MIDvA(0x0b);
|
||||
* can_mailbox_init(CAN0, &can0_mailbox);
|
||||
*
|
||||
* can0_mailbox.ul_datal = 0x11223344;
|
||||
* can0_mailbox.ul_datah = 0x44332211;
|
||||
* can0_mailbox.uc_length = 8;
|
||||
* can_mailbox_write(CAN0, &can0_mailbox);
|
||||
*
|
||||
* can1_mailbox.ul_mb_idx = 0;
|
||||
* can1_mailbox.uc_obj_type = CAN_MB_CONSUMER_MODE;
|
||||
* can1_mailbox.uc_tx_prio = 15;
|
||||
* can1_mailbox.ul_id_msk = CAN_MID_MIDvA_Msk | CAN_MID_MIDvB_Msk;
|
||||
* can1_mailbox.ul_id = CAN_MID_MIDvA(0x0b);
|
||||
* can_mailbox_init(CAN1, &can1_mailbox);
|
||||
*
|
||||
* can_enable_interrupt(CAN1, CAN_IER_MB0);
|
||||
* NVIC_EnableIRQ(CAN1_IRQn);
|
||||
* \endcode
|
||||
*
|
||||
* \subsection can_use_case_1_setup_flow Workflow
|
||||
* -# Define the CAN0 and CAN1 Transfer mailbox structure:
|
||||
* - \code
|
||||
* can_mb_conf_t can0_mailbox;
|
||||
* can_mb_conf_t can1_mailbox;
|
||||
* \endcode
|
||||
* -# Define the receive flag that is changed in CAN1 ISR handler:
|
||||
* - \code volatile uint32_t g_ul_recv_status = 0; \endcode
|
||||
* -# Define the CAN1 ISR handler in the application:
|
||||
* - \code void CAN1_Handler(void); \endcode
|
||||
* -# In CAN1_Handler(), get CAN1 mailbox 0 status:
|
||||
* - \code ul_status = can_mailbox_get_status(CAN1, 0); \endcode
|
||||
* -# In CAN1_Handler(), check whether the mailbox 0 has received a data frame:
|
||||
* - \code
|
||||
* if ((ul_status & CAN_MSR_MRDY) == CAN_MSR_MRDY) {
|
||||
* can1_mailbox.ul_mb_idx = 0;
|
||||
* can1_mailbox.ul_status = ul_status;
|
||||
* can_mailbox_read(CAN1, &can1_mailbox);
|
||||
* g_ul_recv_status = 1;
|
||||
* }
|
||||
* \endcode
|
||||
* -# In CAN1_Handler(), if mailbox 0 is ready, read the received data from CAN1 mailbox 0:
|
||||
* - \code
|
||||
* can1_mailbox.ul_mb_idx = 0;
|
||||
* can1_mailbox.ul_status = ul_status;
|
||||
* can_mailbox_read(CAN1, &can1_mailbox);
|
||||
* \endcode
|
||||
* -# In CAN1_Handler(), if mailbox 0 is ready, set up the receive flag:
|
||||
* - \code g_ul_recv_status = 1; \endcode
|
||||
* -# Enable the module clock for CAN0 and CAN1:
|
||||
* - \code
|
||||
* pmc_enable_periph_clk(ID_CAN0);
|
||||
* pmc_enable_periph_clk(ID_CAN1);
|
||||
* \endcode
|
||||
* -# Initialize CAN0 and CAN1, baudrate is 1Mb/s:
|
||||
* - \code
|
||||
* can_init(CAN0, ul_sysclk, CAN_BPS_1000K);
|
||||
* can_init(CAN1, ul_sysclk, CAN_BPS_1000K);
|
||||
* \endcode
|
||||
* - \note The CAN transceiver should be configured before initializing the CAN module.
|
||||
* -# Reset all CAN0 and CAN1 mailboxes:
|
||||
* - \code
|
||||
* can_reset_all_mailbox(CAN0);
|
||||
* can_reset_all_mailbox(CAN1);
|
||||
* \endcode
|
||||
* -# Initialize CAN0 mailbox 0 as PRODUCER:
|
||||
* - \code
|
||||
* can0_mailbox.ul_mb_idx = 0;
|
||||
* can0_mailbox.uc_obj_type = CAN_MB_PRODUCER_MODE;
|
||||
* can0_mailbox.ul_id_msk = 0;
|
||||
* can0_mailbox.ul_id = CAN_MID_MIDvA(0x0b);
|
||||
* can_mailbox_init(CAN0, &can0_mailbox);
|
||||
* \endcode
|
||||
* -# Prepare the response information when it receives a remote frame:
|
||||
* - \code
|
||||
* can0_mailbox.ul_datal = 0x11223344;
|
||||
* can0_mailbox.ul_datah = 0x44332211;
|
||||
* can0_mailbox.uc_length = 8;
|
||||
* can_mailbox_write(CAN0, &can0_mailbox);
|
||||
* \endcode
|
||||
* -# Initialize CAN1 mailbox 0 as CONSUMER:
|
||||
* - \code
|
||||
* can1_mailbox.ul_mb_idx = 0;
|
||||
* can1_mailbox.uc_obj_type = CAN_MB_CONSUMER_MODE;
|
||||
* can1_mailbox.uc_tx_prio = 15;
|
||||
* can1_mailbox.ul_id_msk = CAN_MID_MIDvA_Msk | CAN_MID_MIDvB_Msk;
|
||||
* can1_mailbox.ul_id = CAN_MID_MIDvA(0x0b);
|
||||
* can_mailbox_init(CAN1, &can1_mailbox);
|
||||
* \endcode
|
||||
* -# Enable the CAN1 mailbox 0 interrupt:
|
||||
* - \code
|
||||
* can_enable_interrupt(CAN1, CAN_IER_MB0);
|
||||
* NVIC_EnableIRQ(CAN1_IRQn);
|
||||
* \endcode
|
||||
*
|
||||
* \section can_use_case_1_usage Usage steps
|
||||
*
|
||||
* \subsection can_use_case_1_usage_code Example code
|
||||
* \code
|
||||
* can_global_send_transfer_cmd(CAN0, CAN_TCR_MB0);
|
||||
* can_global_send_transfer_cmd(CAN1, CAN_TCR_MB0);
|
||||
*
|
||||
* while (!g_ul_recv_status) {
|
||||
* }
|
||||
* \endcode
|
||||
*
|
||||
* \subsection can_use_case_1_usage_flow Workflow
|
||||
* -# Enable CAN0 mailbox 0 to receive remote frame and respond it:
|
||||
* - \code can_global_send_transfer_cmd(CAN0, CAN_TCR_MB0); \endcode
|
||||
* -# Enable CAN1 mailbox 0 to send out a remote frame and then receive data frame from bus:
|
||||
* - \code can_global_send_transfer_cmd(CAN1, CAN_TCR_MB0); \endcode
|
||||
* -# Wait for the communication to be completed.
|
||||
* - \code
|
||||
* while (!g_ul_recv_status) {
|
||||
* }
|
||||
* \endcode
|
||||
*/
|
||||
|
||||
#endif /* CAN_H_INCLUDED */
|
||||
102
digistump-sam/system/libsam/include/dacc.h
Normal file
102
digistump-sam/system/libsam/include/dacc.h
Normal file
@@ -0,0 +1,102 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef DACC_H_INCLUDED
|
||||
#define DACC_H_INCLUDED
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
/// @cond 0
|
||||
/**INDENT-OFF**/
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**INDENT-ON**/
|
||||
/// @endcond
|
||||
|
||||
//! DACC return codes
|
||||
typedef enum dacc_rc {
|
||||
DACC_RC_OK = 0, //!< Operation OK
|
||||
DACC_RC_INVALID_PARAM //!< Invalid parameter
|
||||
} dacc_rc_t;
|
||||
|
||||
#if SAM3N_SERIES
|
||||
//! DACC resolution in number of data bits
|
||||
# define DACC_RESOLUTION 10
|
||||
#else
|
||||
//! DACC resolution in number of data bits
|
||||
# define DACC_RESOLUTION 12
|
||||
#endif
|
||||
//! DACC max data value
|
||||
#define DACC_MAX_DATA ((1 << DACC_RESOLUTION) - 1)
|
||||
|
||||
void dacc_reset(Dacc *p_dacc);
|
||||
uint32_t dacc_set_trigger(Dacc *p_dacc, uint32_t ul_trigger);
|
||||
void dacc_disable_trigger(Dacc *p_dacc);
|
||||
uint32_t dacc_set_transfer_mode(Dacc *p_dacc, uint32_t ul_mode);
|
||||
void dacc_enable_interrupt(Dacc *p_dacc, uint32_t ul_interrupt_mask);
|
||||
void dacc_disable_interrupt(Dacc *p_dacc, uint32_t ul_interrupt_mask);
|
||||
uint32_t dacc_get_interrupt_mask(Dacc *p_dacc);
|
||||
uint32_t dacc_get_interrupt_status(Dacc *p_dacc);
|
||||
void dacc_write_conversion_data(Dacc *p_dacc, uint32_t ul_data);
|
||||
void dacc_set_writeprotect(Dacc *p_dacc, uint32_t ul_enable);
|
||||
uint32_t dacc_get_writeprotect_status(Dacc *p_dacc);
|
||||
Pdc *dacc_get_pdc_base(Dacc *p_dacc);
|
||||
|
||||
#if (SAM3N_SERIES) || defined(__DOXYGEN__)
|
||||
void dacc_enable(Dacc *p_dacc);
|
||||
void dacc_disable(Dacc *p_dacc);
|
||||
uint32_t dacc_set_timing(Dacc *p_dacc, uint32_t ul_startup,
|
||||
uint32_t ul_clock_divider);
|
||||
#endif /* (SAM3N_SERIES) */
|
||||
|
||||
#if (SAM3S_SERIES) || (SAM3XA_SERIES) || (SAM4S_SERIES) || defined(__DOXYGEN__)
|
||||
uint32_t dacc_set_channel_selection(Dacc *p_dacc, uint32_t ul_channel);
|
||||
void dacc_enable_flexible_selection(Dacc *p_dacc);
|
||||
|
||||
uint32_t dacc_set_power_save(Dacc *p_dacc, uint32_t ul_sleep_mode,
|
||||
uint32_t ul_fast_wakeup_mode);
|
||||
uint32_t dacc_set_timing(Dacc *p_dacc, uint32_t ul_refresh, uint32_t ul_maxs,
|
||||
uint32_t ul_startup);
|
||||
uint32_t dacc_enable_channel(Dacc *p_dacc, uint32_t ul_channel);
|
||||
uint32_t dacc_disable_channel(Dacc *p_dacc, uint32_t ul_channel);
|
||||
uint32_t dacc_get_channel_status(Dacc *p_dacc);
|
||||
uint32_t dacc_set_analog_control(Dacc *p_dacc, uint32_t ul_analog_control);
|
||||
uint32_t dacc_get_analog_control(Dacc *p_dacc);
|
||||
#endif /* (SAM3S_SERIES) || (SAM3XA_SERIES) */
|
||||
|
||||
/// @cond 0
|
||||
/**INDENT-OFF**/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
/**INDENT-ON**/
|
||||
/// @endcond
|
||||
|
||||
#endif /* DACC_H_INCLUDED */
|
||||
132
digistump-sam/system/libsam/include/efc.h
Normal file
132
digistump-sam/system/libsam/include/efc.h
Normal file
@@ -0,0 +1,132 @@
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* \brief Embedded Flash Controller (EFC) driver for SAM.
|
||||
*
|
||||
* Copyright (c) 2011-2012 Atmel Corporation. All rights reserved.
|
||||
*
|
||||
* \asf_license_start
|
||||
*
|
||||
* \page License
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of Atmel may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* 4. This software may only be redistributed and used in connection with an
|
||||
* Atmel microcontroller product.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* \asf_license_stop
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef EFC_H_INCLUDED
|
||||
#define EFC_H_INCLUDED
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
/// @cond 0
|
||||
/**INDENT-OFF**/
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**INDENT-ON**/
|
||||
/// @endcond
|
||||
|
||||
/*! \name EFC return codes */
|
||||
//! @{
|
||||
typedef enum efc_rc {
|
||||
EFC_RC_OK = 0, //!< Operation OK
|
||||
EFC_RC_YES = 0, //!< Yes
|
||||
EFC_RC_NO = 1, //!< No
|
||||
EFC_RC_ERROR = 1, //!< General error
|
||||
EFC_RC_INVALID, //!< Invalid argument input
|
||||
EFC_RC_NOT_SUPPORT = 0xFFFFFFFF //!< Operation is not supported
|
||||
} efc_rc_t;
|
||||
//! @}
|
||||
|
||||
/*! \name EFC command */
|
||||
//! @{
|
||||
#define EFC_FCMD_GETD 0x00 //!< Get Flash Descriptor
|
||||
#define EFC_FCMD_WP 0x01 //!< Write page
|
||||
#define EFC_FCMD_WPL 0x02 //!< Write page and lock
|
||||
#define EFC_FCMD_EWP 0x03 //!< Erase page and write page
|
||||
#define EFC_FCMD_EWPL 0x04 //!< Erase page and write page then lock
|
||||
#define EFC_FCMD_EA 0x05 //!< Erase all
|
||||
#if (SAM3SD8_SERIES)
|
||||
#define EFC_FCMD_EPL 0x06 //!< Erase plane
|
||||
#endif
|
||||
#if (SAM4S_SERIES)
|
||||
#define EFC_FCMD_EPA 0x07 //!< Erase pages
|
||||
#endif
|
||||
#define EFC_FCMD_SLB 0x08 //!< Set Lock Bit
|
||||
#define EFC_FCMD_CLB 0x09 //!< Clear Lock Bit
|
||||
#define EFC_FCMD_GLB 0x0A //!< Get Lock Bit
|
||||
#define EFC_FCMD_SGPB 0x0B //!< Set GPNVM Bit
|
||||
#define EFC_FCMD_CGPB 0x0C //!< Clear GPNVM Bit
|
||||
#define EFC_FCMD_GGPB 0x0D //!< Get GPNVM Bit
|
||||
#define EFC_FCMD_STUI 0x0E //!< Start unique ID
|
||||
#define EFC_FCMD_SPUI 0x0F //!< Stop unique ID
|
||||
#if (SAM3S_SERIES || SAM3N_SERIES || SAM3XA_SERIES || SAM4S_SERIES)
|
||||
#define EFC_FCMD_GCALB 0x10 //!< Get CALIB Bit
|
||||
#endif
|
||||
#if (SAM4S_SERIES)
|
||||
#define EFC_FCMD_ES 0x11 //!< Erase sector
|
||||
#define EFC_FCMD_WUS 0x12 //!< Write user signature
|
||||
#define EFC_FCMD_EUS 0x13 //!< Erase user signature
|
||||
#define EFC_FCMD_STUS 0x14 //!< Start read user signature
|
||||
#define EFC_FCMD_SPUS 0x15 //!< Stop read user signature
|
||||
#endif
|
||||
//! @}
|
||||
|
||||
/*! The IAP function entry address */
|
||||
#define CHIP_FLASH_IAP_ADDRESS (IROM_ADDR + 8)
|
||||
|
||||
/*! \name EFC access mode */
|
||||
//! @{
|
||||
#define EFC_ACCESS_MODE_128 0
|
||||
#define EFC_ACCESS_MODE_64 EEFC_FMR_FAM
|
||||
//! @}
|
||||
|
||||
uint32_t efc_init(Efc *p_efc, uint32_t ul_access_mode, uint32_t ul_fws);
|
||||
void efc_enable_frdy_interrupt(Efc *p_efc);
|
||||
void efc_disable_frdy_interrupt(Efc *p_efc);
|
||||
void efc_set_flash_access_mode(Efc *p_efc, uint32_t ul_mode);
|
||||
uint32_t efc_get_flash_access_mode(Efc *p_efc);
|
||||
void efc_set_wait_state(Efc *p_efc, uint32_t ul_fws);
|
||||
uint32_t efc_get_wait_state(Efc *p_efc);
|
||||
uint32_t efc_perform_command(Efc *p_efc, uint32_t ul_command, uint32_t ul_argument);
|
||||
uint32_t efc_get_status(Efc *p_efc);
|
||||
uint32_t efc_get_result(Efc *p_efc);
|
||||
uint32_t efc_perform_read_sequence(Efc *p_efc, uint32_t ul_cmd_st, uint32_t ul_cmd_sp, uint32_t *p_ul_buf, uint32_t ul_size);
|
||||
|
||||
/// @cond 0
|
||||
/**INDENT-OFF**/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
/**INDENT-ON**/
|
||||
/// @endcond
|
||||
|
||||
#endif /* EFC_H_INCLUDED */
|
||||
1225
digistump-sam/system/libsam/include/emac.h
Normal file
1225
digistump-sam/system/libsam/include/emac.h
Normal file
File diff suppressed because it is too large
Load Diff
80
digistump-sam/system/libsam/include/gpbr.h
Normal file
80
digistump-sam/system/libsam/include/gpbr.h
Normal file
@@ -0,0 +1,80 @@
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* \brief General Purpose Backup Registers (GPBR) driver for SAM.
|
||||
*
|
||||
* Copyright (c) 2011-2012 Atmel Corporation. All rights reserved.
|
||||
*
|
||||
* \asf_license_start
|
||||
*
|
||||
* \page License
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of Atmel may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* 4. This software may only be redistributed and used in connection with an
|
||||
* Atmel microcontroller product.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* \asf_license_stop
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GPBR_H_INCLUDED
|
||||
#define GPBR_H_INCLUDED
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
/// @cond 0
|
||||
/**INDENT-OFF**/
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**INDENT-ON**/
|
||||
/// @endcond
|
||||
|
||||
/** GPBR register number type */
|
||||
typedef enum gpbr_num_type {
|
||||
GPBR0 = 0,
|
||||
GPBR1,
|
||||
GPBR2,
|
||||
GPBR3,
|
||||
GPBR4,
|
||||
GPBR5,
|
||||
GPBR6,
|
||||
GPBR7
|
||||
} gpbr_num_t;
|
||||
|
||||
uint32_t gpbr_read(gpbr_num_t ul_reg_num);
|
||||
void gpbr_write(gpbr_num_t ul_reg_num, uint32_t ul_value);
|
||||
|
||||
/// @cond 0
|
||||
/**INDENT-OFF**/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
/**INDENT-ON**/
|
||||
/// @endcond
|
||||
|
||||
#endif /* GPBR_H_INCLUDED */
|
||||
153
digistump-sam/system/libsam/include/interrupt_sam_nvic.h
Normal file
153
digistump-sam/system/libsam/include/interrupt_sam_nvic.h
Normal file
@@ -0,0 +1,153 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef UTILS_INTERRUPT_INTERRUPT_H
|
||||
#define UTILS_INTERRUPT_INTERRUPT_H
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
/**
|
||||
* \weakgroup interrupt_group
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* \name Interrupt Service Routine definition
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* \brief Define service routine
|
||||
*
|
||||
* \note For NVIC devices the interrupt service routines are predefined to
|
||||
* add to vector table in binary generation, so there is no service
|
||||
* register at run time. The routine collections are in exceptions.h.
|
||||
*
|
||||
* Usage:
|
||||
* \code
|
||||
* ISR(foo_irq_handler)
|
||||
* {
|
||||
* // Function definition
|
||||
* ...
|
||||
* }
|
||||
* \endcode
|
||||
*
|
||||
* \param func Name for the function.
|
||||
*/
|
||||
# define ISR(func) \
|
||||
void func (void)
|
||||
|
||||
/**
|
||||
* \brief Initialize interrupt vectors
|
||||
*
|
||||
* For NVIC the interrupt vectors are put in vector table. So nothing
|
||||
* to do to initialize them, except defined the vector function with
|
||||
* right name.
|
||||
*
|
||||
* This must be called prior to \ref irq_register_handler.
|
||||
*/
|
||||
# define irq_initialize_vectors() \
|
||||
do { \
|
||||
} while(0)
|
||||
|
||||
/**
|
||||
* \brief Register handler for interrupt
|
||||
*
|
||||
* For NVIC the interrupt vectors are put in vector table. So nothing
|
||||
* to do to register them, except defined the vector function with
|
||||
* right name.
|
||||
*
|
||||
* Usage:
|
||||
* \code
|
||||
* irq_initialize_vectors();
|
||||
* irq_register_handler(foo_irq_handler);
|
||||
* \endcode
|
||||
*
|
||||
* \note The function \a func must be defined with the \ref ISR macro.
|
||||
* \note The functions prototypes can be found in the device exception header
|
||||
* files (exceptions.h).
|
||||
*/
|
||||
# define irq_register_handler(...) \
|
||||
do { \
|
||||
} while(0)
|
||||
|
||||
//@}
|
||||
|
||||
# define cpu_irq_enable() \
|
||||
do { \
|
||||
g_interrupt_enabled = 1; \
|
||||
__DMB(); \
|
||||
__enable_irq(); \
|
||||
} while (0)
|
||||
# define cpu_irq_disable() \
|
||||
do { \
|
||||
__disable_irq(); \
|
||||
__DMB(); \
|
||||
g_interrupt_enabled = 0; \
|
||||
} while (0)
|
||||
|
||||
typedef uint32_t irqflags_t;
|
||||
extern int g_interrupt_enabled;
|
||||
|
||||
static inline irqflags_t cpu_irq_save(void)
|
||||
{
|
||||
irqflags_t flags = g_interrupt_enabled;
|
||||
cpu_irq_disable();
|
||||
return flags;
|
||||
}
|
||||
|
||||
static inline int cpu_irq_is_enabled_flags(irqflags_t flags)
|
||||
{
|
||||
return (flags);
|
||||
}
|
||||
|
||||
static inline void cpu_irq_restore(irqflags_t flags)
|
||||
{
|
||||
if (cpu_irq_is_enabled_flags(flags))
|
||||
cpu_irq_enable();
|
||||
}
|
||||
|
||||
#define cpu_irq_is_enabled() g_interrupt_enabled
|
||||
|
||||
/**
|
||||
* \weakgroup interrupt_deprecated_group
|
||||
* @{
|
||||
*/
|
||||
|
||||
#define Enable_global_interrupt() cpu_irq_enable()
|
||||
#define Disable_global_interrupt() cpu_irq_disable()
|
||||
#define Is_global_interrupt_enabled() cpu_irq_is_enabled()
|
||||
|
||||
//@}
|
||||
|
||||
//@}
|
||||
|
||||
#endif /* UTILS_INTERRUPT_INTERRUPT_H */
|
||||
132
digistump-sam/system/libsam/include/pio.h
Normal file
132
digistump-sam/system/libsam/include/pio.h
Normal file
@@ -0,0 +1,132 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef _PIO_
|
||||
#define _PIO_
|
||||
|
||||
/*
|
||||
* Headers
|
||||
*/
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/*
|
||||
* Global Definitions
|
||||
*/
|
||||
typedef enum _EPioType
|
||||
{
|
||||
PIO_NOT_A_PIN, /* Not under control of a peripheral. */
|
||||
PIO_PERIPH_A, /* The pin is controlled by the associated signal of peripheral A. */
|
||||
PIO_PERIPH_B, /* The pin is controlled by the associated signal of peripheral B. */
|
||||
#if (defined _SAM3S_) || (defined _SAM3S8_) || (defined _SAM3N_)
|
||||
PIO_PERIPH_C, /* The pin is controlled by the associated signal of peripheral C. */
|
||||
PIO_PERIPH_D, /* The pin is controlled by the associated signal of peripheral D. */
|
||||
#endif /* (defined _SAM3S_) || (defined _SAM3S8_) || (defined _SAM3N_) */
|
||||
PIO_INPUT, /* The pin is an input. */
|
||||
PIO_OUTPUT_0, /* The pin is an output and has a default level of 0. */
|
||||
PIO_OUTPUT_1 /* The pin is an output and has a default level of 1. */
|
||||
} EPioType ;
|
||||
|
||||
|
||||
/* Default pin configuration (no attribute). */
|
||||
#define PIO_DEFAULT (0u << 0)
|
||||
/* The internal pin pull-up is active. */
|
||||
#define PIO_PULLUP (1u << 0)
|
||||
/* The internal glitch filter is active. */
|
||||
#define PIO_DEGLITCH (1u << 1)
|
||||
/* The pin is open-drain. */
|
||||
#define PIO_OPENDRAIN (1u << 2)
|
||||
|
||||
/* The internal debouncing filter is active. */
|
||||
#define PIO_DEBOUNCE (1u << 3)
|
||||
|
||||
/* Enable additional interrupt modes. */
|
||||
#define PIO_IT_AIME (1u << 4)
|
||||
|
||||
/* Interrupt High Level/Rising Edge detection is active. */
|
||||
#define PIO_IT_RE_OR_HL (1u << 5)
|
||||
/* Interrupt Edge detection is active. */
|
||||
#define PIO_IT_EDGE (1u << 6)
|
||||
|
||||
/* Low level interrupt is active */
|
||||
#define PIO_IT_LOW_LEVEL (0 | 0 | PIO_IT_AIME)
|
||||
/* High level interrupt is active */
|
||||
#define PIO_IT_HIGH_LEVEL (PIO_IT_RE_OR_HL | 0 | PIO_IT_AIME)
|
||||
/* Falling edge interrupt is active */
|
||||
#define PIO_IT_FALL_EDGE (0 | PIO_IT_EDGE | PIO_IT_AIME)
|
||||
/* Rising edge interrupt is active */
|
||||
#define PIO_IT_RISE_EDGE (PIO_IT_RE_OR_HL | PIO_IT_EDGE | PIO_IT_AIME)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The #attribute# field is a bitmask that can either be set to PIO_DEFAULt,
|
||||
* or combine (using bitwise OR '|') any number of the following constants:
|
||||
* - PIO_PULLUP
|
||||
* - PIO_DEGLITCH
|
||||
* - PIO_DEBOUNCE
|
||||
* - PIO_OPENDRAIN
|
||||
* - PIO_IT_LOW_LEVEL
|
||||
* - PIO_IT_HIGH_LEVEL
|
||||
* - PIO_IT_FALL_EDGE
|
||||
* - PIO_IT_RISE_EDGE
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Global Functions
|
||||
*/
|
||||
extern void PIO_DisableInterrupt( Pio* pPio, const uint32_t dwMask ) ;
|
||||
extern void PIO_PullUp( Pio* pPio, const uint32_t dwMask, const uint32_t dwPullUpEnable ) ;
|
||||
extern void PIO_SetDebounceFilter( Pio* pPio, const uint32_t dwMask, const uint32_t dwCuttOff ) ;
|
||||
|
||||
extern void PIO_Set( Pio* pPio, const uint32_t dwMask ) ;
|
||||
extern void PIO_Clear( Pio* pPio, const uint32_t dwMask ) ;
|
||||
extern uint32_t PIO_Get( Pio* pPio, const EPioType dwType, const uint32_t dwMask ) ;
|
||||
|
||||
extern void PIO_SetPeripheral( Pio* pPio, const EPioType dwType, const uint32_t dwMask ) ;
|
||||
extern void PIO_SetInput( Pio* pPio, uint32_t dwMask, uint32_t dwAttribute ) ;
|
||||
extern void PIO_SetOutput( Pio* pPio, uint32_t dwMask, uint32_t dwDefaultValue,
|
||||
uint32_t dwMultiDriveEnable, uint32_t dwPullUpEnable ) ;
|
||||
|
||||
extern uint32_t PIO_Configure( Pio* pPio, const EPioType dwType, const uint32_t dwMask, const uint32_t dwAttribute ) ;
|
||||
|
||||
extern uint32_t PIO_GetOutputDataStatus( const Pio* pPio, const uint32_t dwMask ) ;
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* #ifndef _PIO_ */
|
||||
|
||||
96
digistump-sam/system/libsam/include/pio_it.h
Normal file
96
digistump-sam/system/libsam/include/pio_it.h
Normal file
@@ -0,0 +1,96 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* \par Purpose
|
||||
*
|
||||
* Configuration and handling of interrupts on PIO status changes. The API
|
||||
* provided here have several advantages over the traditional PIO interrupt
|
||||
* configuration approach:
|
||||
* - It is highly portable
|
||||
* - It automatically demultiplexes interrupts when multiples pins have been
|
||||
* configured on a single PIO controller
|
||||
* - It allows a group of pins to share the same interrupt
|
||||
*
|
||||
* However, it also has several minor drawbacks that may prevent from using it
|
||||
* in particular applications:
|
||||
* - It enables the clocks of all PIO controllers
|
||||
* - PIO controllers all share the same interrupt handler, which does the
|
||||
* demultiplexing and can be slower than direct configuration
|
||||
* - It reserves space for a fixed number of interrupts, which can be
|
||||
* increased by modifying the appropriate constant in pio_it.c.
|
||||
*
|
||||
* \par Usage
|
||||
*
|
||||
* -# Initialize the PIO interrupt mechanism using PIO_InitializeInterrupts()
|
||||
* with the desired priority (0 ... 7).
|
||||
* -# Configure a status change interrupt on one or more pin(s) with
|
||||
* PIO_ConfigureIt().
|
||||
* -# Enable & disable interrupts on pins using PIO_EnableIt() and
|
||||
* PIO_DisableIt().
|
||||
*/
|
||||
|
||||
#ifndef _PIO_IT_
|
||||
#define _PIO_IT_
|
||||
|
||||
/*
|
||||
* Headers
|
||||
*/
|
||||
|
||||
#include "pio.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Global functions
|
||||
*/
|
||||
|
||||
extern void PIO_InitializeInterrupts( uint32_t dwPriority ) ;
|
||||
|
||||
extern void PIO_ConfigureIt( const Pin *pPin, void (*handler)( const Pin* ) ) ;
|
||||
|
||||
extern void PIO_EnableIt( const Pio* pPio, const uint32_t dwMask ) ;
|
||||
extern void PIO_DisableIt( const Pio* pPio, const uint32_t dwMask ) ;
|
||||
|
||||
extern void PIO_IT_InterruptHandler( void ) ;
|
||||
|
||||
extern void PioInterruptHandler( uint32_t id, Pio *pPio ) ;
|
||||
|
||||
extern void PIO_CaptureHandler( void ) ;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* #ifndef _PIO_IT_ */
|
||||
|
||||
424
digistump-sam/system/libsam/include/pmc.h
Normal file
424
digistump-sam/system/libsam/include/pmc.h
Normal file
@@ -0,0 +1,424 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef PMC_H_INCLUDED
|
||||
#define PMC_H_INCLUDED
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
/// @cond 0
|
||||
/**INDENT-OFF**/
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**INDENT-ON**/
|
||||
/// @endcond
|
||||
|
||||
/** Bit mask for peripheral clocks (PCER0) */
|
||||
#define PMC_MASK_STATUS0 (0xFFFFFFFC)
|
||||
|
||||
/** Bit mask for peripheral clocks (PCER1) */
|
||||
#define PMC_MASK_STATUS1 (0xFFFFFFFF)
|
||||
|
||||
/** Loop counter timeout value */
|
||||
#define PMC_TIMEOUT (2048)
|
||||
|
||||
/** Key to unlock CKGR_MOR register */
|
||||
#define PMC_CKGR_MOR_KEY_VALUE CKGR_MOR_KEY(0x37)
|
||||
|
||||
/** Key used to write SUPC registers */
|
||||
#define SUPC_KEY_VALUE ((uint32_t) 0xA5)
|
||||
|
||||
/** PMC xtal statup time */
|
||||
#define PMC_XTAL_STARTUP_TIME (0x3F)
|
||||
|
||||
/** Mask to access fast startup input */
|
||||
#define PMC_FAST_STARTUP_Msk (0xFFFFu)
|
||||
|
||||
/** PMC_WPMR Write Protect KEY, unlock it */
|
||||
#define PMC_WPMR_WPKEY_VALUE PMC_WPMR_WPKEY((uint32_t) 0x504D43)
|
||||
|
||||
/** Using external oscillator */
|
||||
#define PMC_OSC_XTAL 0
|
||||
|
||||
/** Oscillator in bypass mode */
|
||||
#define PMC_OSC_BYPASS 1
|
||||
|
||||
#define PMC_PCK_0 0 /* PCK0 ID */
|
||||
#define PMC_PCK_1 1 /* PCK1 ID */
|
||||
#define PMC_PCK_2 2 /* PCK2 ID */
|
||||
|
||||
/**
|
||||
* \name Master clock (MCK) Source and Prescaler configuration
|
||||
*
|
||||
* The following functions may be used to select the clock source and
|
||||
* prescaler for the master clock.
|
||||
*/
|
||||
//@{
|
||||
|
||||
void pmc_mck_set_prescaler(uint32_t ul_pres);
|
||||
void pmc_mck_set_source(uint32_t ul_source);
|
||||
uint32_t pmc_switch_mck_to_sclk(uint32_t ul_pres);
|
||||
uint32_t pmc_switch_mck_to_mainck(uint32_t ul_pres);
|
||||
uint32_t pmc_switch_mck_to_pllack(uint32_t ul_pres);
|
||||
#if (SAM3S_SERIES || SAM4S_SERIES)
|
||||
uint32_t pmc_switch_mck_to_pllbck(uint32_t ul_pres);
|
||||
#endif
|
||||
#if (SAM3XA_SERIES || SAM3U_SERIES)
|
||||
uint32_t pmc_switch_mck_to_upllck(uint32_t ul_pres);
|
||||
#endif
|
||||
|
||||
//@}
|
||||
|
||||
/**
|
||||
* \name Slow clock (SLCK) oscillator and configuration
|
||||
*
|
||||
*/
|
||||
//@{
|
||||
|
||||
void pmc_switch_sclk_to_32kxtal(uint32_t ul_bypass);
|
||||
uint32_t pmc_osc_is_ready_32kxtal(void);
|
||||
|
||||
//@}
|
||||
|
||||
/**
|
||||
* \name Main Clock (MAINCK) oscillator and configuration
|
||||
*
|
||||
*/
|
||||
//@{
|
||||
|
||||
void pmc_switch_mainck_to_fastrc(uint32_t ul_moscrcf);
|
||||
void pmc_osc_enable_fastrc(uint32_t ul_rc);
|
||||
void pmc_osc_disable_fastrc(void);
|
||||
void pmc_switch_mainck_to_xtal(uint32_t ul_bypass);
|
||||
void pmc_osc_disable_xtal(uint32_t ul_bypass);
|
||||
uint32_t pmc_osc_is_ready_mainck(void);
|
||||
|
||||
//@}
|
||||
|
||||
/**
|
||||
* \name PLL oscillator and configuration
|
||||
*
|
||||
*/
|
||||
//@{
|
||||
|
||||
void pmc_enable_pllack(uint32_t mula, uint32_t pllacount, uint32_t diva);
|
||||
void pmc_disable_pllack(void);
|
||||
uint32_t pmc_is_locked_pllack(void);
|
||||
|
||||
#if (SAM3S_SERIES || SAM4S_SERIES)
|
||||
void pmc_enable_pllbck(uint32_t mulb, uint32_t pllbcount, uint32_t divb);
|
||||
void pmc_disable_pllbck(void);
|
||||
uint32_t pmc_is_locked_pllbck(void);
|
||||
#endif
|
||||
|
||||
#if (SAM3XA_SERIES || SAM3U_SERIES)
|
||||
void pmc_enable_upll_clock(void);
|
||||
void pmc_disable_upll_clock(void);
|
||||
uint32_t pmc_is_locked_upll(void);
|
||||
#endif
|
||||
|
||||
//@}
|
||||
|
||||
/**
|
||||
* \name Peripherals clock configuration
|
||||
*
|
||||
*/
|
||||
//@{
|
||||
|
||||
uint32_t pmc_enable_periph_clk(uint32_t ul_id);
|
||||
uint32_t pmc_disable_periph_clk(uint32_t ul_id);
|
||||
void pmc_enable_all_periph_clk(void);
|
||||
void pmc_disable_all_periph_clk(void);
|
||||
uint32_t pmc_is_periph_clk_enabled(uint32_t ul_id);
|
||||
|
||||
//@}
|
||||
|
||||
/**
|
||||
* \name Programmable clock Source and Prescaler configuration
|
||||
*
|
||||
* The following functions may be used to select the clock source and
|
||||
* prescaler for the specified programmable clock.
|
||||
*/
|
||||
//@{
|
||||
|
||||
void pmc_pck_set_prescaler(uint32_t ul_id, uint32_t ul_pres);
|
||||
void pmc_pck_set_source(uint32_t ul_id, uint32_t ul_source);
|
||||
uint32_t pmc_switch_pck_to_sclk(uint32_t ul_id, uint32_t ul_pres);
|
||||
uint32_t pmc_switch_pck_to_mainck(uint32_t ul_id, uint32_t ul_pres);
|
||||
uint32_t pmc_switch_pck_to_pllack(uint32_t ul_id, uint32_t ul_pres);
|
||||
#if (SAM3S_SERIES || SAM4S_SERIES)
|
||||
uint32_t pmc_switch_pck_to_pllbck(uint32_t ul_id, uint32_t ul_pres);
|
||||
#endif
|
||||
#if (SAM3XA_SERIES || SAM3U_SERIES)
|
||||
uint32_t pmc_switch_pck_to_upllck(uint32_t ul_id, uint32_t ul_pres);
|
||||
#endif
|
||||
void pmc_enable_pck(uint32_t ul_id);
|
||||
void pmc_disable_pck(uint32_t ul_id);
|
||||
void pmc_enable_all_pck(void);
|
||||
void pmc_disable_all_pck(void);
|
||||
uint32_t pmc_is_pck_enabled(uint32_t ul_id);
|
||||
|
||||
//@}
|
||||
|
||||
/**
|
||||
* \name USB clock configuration
|
||||
*
|
||||
*/
|
||||
//@{
|
||||
|
||||
#if (SAM3S_SERIES || SAM3XA_SERIES || SAM4S_SERIES)
|
||||
void pmc_switch_udpck_to_pllack(uint32_t ul_usbdiv);
|
||||
#endif
|
||||
#if (SAM3S_SERIES || SAM4S_SERIES)
|
||||
void pmc_switch_udpck_to_pllbck(uint32_t ul_usbdiv);
|
||||
#endif
|
||||
#if (SAM3XA_SERIES)
|
||||
void pmc_switch_udpck_to_upllck(uint32_t ul_usbdiv);
|
||||
#endif
|
||||
#if (SAM3S_SERIES || SAM3XA_SERIES || SAM4S_SERIES)
|
||||
void pmc_enable_udpck(void);
|
||||
void pmc_disable_udpck(void);
|
||||
#endif
|
||||
|
||||
//@}
|
||||
|
||||
/**
|
||||
* \name Interrupt and status management
|
||||
*
|
||||
*/
|
||||
//@{
|
||||
|
||||
void pmc_enable_interrupt(uint32_t ul_sources);
|
||||
void pmc_disable_interrupt(uint32_t ul_sources);
|
||||
uint32_t pmc_get_interrupt_mask(void);
|
||||
uint32_t pmc_get_status(void);
|
||||
|
||||
//@}
|
||||
|
||||
/**
|
||||
* \name Power management
|
||||
*
|
||||
* The following functions are used to configure sleep mode and additionnal
|
||||
* wake up inputs.
|
||||
*/
|
||||
//@{
|
||||
|
||||
void pmc_set_fast_startup_input(uint32_t ul_inputs);
|
||||
void pmc_clr_fast_startup_input(uint32_t ul_inputs);
|
||||
void pmc_enable_sleepmode(uint8_t uc_type);
|
||||
void pmc_enable_waitmode(void);
|
||||
void pmc_enable_backupmode(void);
|
||||
|
||||
//@}
|
||||
|
||||
/**
|
||||
* \name Write protection
|
||||
*
|
||||
*/
|
||||
//@{
|
||||
|
||||
void pmc_set_writeprotect(uint32_t ul_enable);
|
||||
uint32_t pmc_get_writeprotect_status(void);
|
||||
|
||||
//@}
|
||||
|
||||
/// @cond 0
|
||||
/**INDENT-OFF**/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
/**INDENT-ON**/
|
||||
/// @endcond
|
||||
|
||||
//! @}
|
||||
|
||||
/**
|
||||
* \page sam_pmc_quickstart Quick start guide for the SAM PMC module
|
||||
*
|
||||
* This is the quick start guide for the \ref pmc_group "PMC module", with
|
||||
* step-by-step instructions on how to configure and use the driver in a
|
||||
* selection of use cases.
|
||||
*
|
||||
* The use cases contain several code fragments. The code fragments in the
|
||||
* steps for setup can be copied into a custom initialization function, while
|
||||
* the steps for usage can be copied into, e.g., the main application function.
|
||||
*
|
||||
* \section pmc_use_cases PMC use cases
|
||||
* - \ref pmc_basic_use_case Basic use case - Switch Main Clock sources
|
||||
* - \ref pmc_use_case_2 Advanced use case - Configure Programmable Clocks
|
||||
*
|
||||
* \section pmc_basic_use_case Basic use case - Switch Main Clock sources
|
||||
* In this use case, the PMC module is configured for a variety of system clock
|
||||
* sources and speeds. A LED is used to visually indicate the current clock
|
||||
* speed as the source is switched.
|
||||
*
|
||||
* \section pmc_basic_use_case_setup Setup
|
||||
*
|
||||
* \subsection pmc_basic_use_case_setup_prereq Prerequisites
|
||||
* -# \ref gpio_group "General Purpose I/O Management (gpio)"
|
||||
*
|
||||
* \subsection pmc_basic_use_case_setup_code Code
|
||||
* The following function needs to be added to the user application, to flash a
|
||||
* board LED a variable number of times at a rate given in CPU ticks.
|
||||
*
|
||||
* \code
|
||||
* #define FLASH_TICK_COUNT 0x00012345
|
||||
*
|
||||
* void flash_led(uint32_t tick_count, uint8_t flash_count)
|
||||
* {
|
||||
* SysTick->CTRL = SysTick_CTRL_ENABLE_Msk;
|
||||
* SysTick->LOAD = tick_count;
|
||||
*
|
||||
* while (flash_count--)
|
||||
* {
|
||||
* gpio_toggle_pin(LED0_GPIO);
|
||||
* while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk));
|
||||
* gpio_toggle_pin(LED0_GPIO);
|
||||
* while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk));
|
||||
* }
|
||||
* }
|
||||
* \endcode
|
||||
*
|
||||
* \section pmc_basic_use_case_usage Use case
|
||||
*
|
||||
* \subsection pmc_basic_use_case_usage_code Example code
|
||||
* Add to application C-file:
|
||||
* \code
|
||||
* for (;;)
|
||||
* {
|
||||
* pmc_switch_mainck_to_fastrc(CKGR_MOR_MOSCRCF_12_MHz);
|
||||
* flash_led(FLASH_TICK_COUNT, 5);
|
||||
* pmc_switch_mainck_to_fastrc(CKGR_MOR_MOSCRCF_8_MHz);
|
||||
* flash_led(FLASH_TICK_COUNT, 5);
|
||||
* pmc_switch_mainck_to_fastrc(CKGR_MOR_MOSCRCF_4_MHz);
|
||||
* flash_led(FLASH_TICK_COUNT, 5);
|
||||
* pmc_switch_mainck_to_xtal(0);
|
||||
* flash_led(FLASH_TICK_COUNT, 5);
|
||||
* }
|
||||
* \endcode
|
||||
*
|
||||
* \subsection pmc_basic_use_case_usage_flow Workflow
|
||||
* -# Wrap the code in an infinite loop:
|
||||
* \code
|
||||
* for (;;)
|
||||
* \endcode
|
||||
* -# Switch the Master CPU frequency to the internal 12MHz RC oscillator, flash
|
||||
* a LED on the board several times:
|
||||
* \code
|
||||
* pmc_switch_mainck_to_fastrc(CKGR_MOR_MOSCRCF_12_MHz);
|
||||
* flash_led(FLASH_TICK_COUNT, 5);
|
||||
* \endcode
|
||||
* -# Switch the Master CPU frequency to the internal 8MHz RC oscillator, flash
|
||||
* a LED on the board several times:
|
||||
* \code
|
||||
* pmc_switch_mainck_to_fastrc(CKGR_MOR_MOSCRCF_8_MHz);
|
||||
* flash_led(FLASH_TICK_COUNT, 5);
|
||||
* \endcode
|
||||
* -# Switch the Master CPU frequency to the internal 4MHz RC oscillator, flash
|
||||
* a LED on the board several times:
|
||||
* \code
|
||||
* pmc_switch_mainck_to_fastrc(CKGR_MOR_MOSCRCF_4_MHz);
|
||||
* flash_led(FLASH_TICK_COUNT, 5);
|
||||
* \endcode
|
||||
* -# Switch the Master CPU frequency to the external crystal oscillator, flash
|
||||
* a LED on the board several times:
|
||||
* \code
|
||||
* pmc_switch_mainck_to_xtal(0);
|
||||
* flash_led(FLASH_TICK_COUNT, 5);
|
||||
* \endcode
|
||||
*/
|
||||
|
||||
/**
|
||||
* \page pmc_use_case_2 Use case #2 - Configure Programmable Clocks
|
||||
* In this use case, the PMC module is configured to start the Slow Clock from
|
||||
* an attached 32KHz crystal, and start one of the Programmable Clock modules
|
||||
* sourced from the Slow Clock divided down with a prescale factor of 64.
|
||||
*
|
||||
* \section pmc_use_case_2_setup Setup
|
||||
*
|
||||
* \subsection pmc_use_case_2_setup_prereq Prerequisites
|
||||
* -# \ref pio_group "Parallel Input/Output Controller (pio)"
|
||||
*
|
||||
* \subsection pmc_use_case_2_setup_code Code
|
||||
* The following code must be added to the user application:
|
||||
* \code
|
||||
* pio_set_peripheral(PIOA, PIO_PERIPH_B, PIO_PA17);
|
||||
* \endcode
|
||||
*
|
||||
* \subsection pmc_use_case_2_setup_code_workflow Workflow
|
||||
* -# Configure the PCK1 pin to output on a specific port pin (in this case,
|
||||
* PIOA pin 17) of the microcontroller.
|
||||
* \code
|
||||
* pio_set_peripheral(PIOA, PIO_PERIPH_B, PIO_PA17);
|
||||
* \endcode
|
||||
* \note The peripheral selection and pin will vary according to your selected
|
||||
* SAM device model. Refer to the "Peripheral Signal Multiplexing on I/O
|
||||
* Lines" of your device's datasheet.
|
||||
*
|
||||
* \section pmc_use_case_2_usage Use case
|
||||
* The generated PCK1 clock output can be viewed on an oscilloscope attached to
|
||||
* the correct pin of the microcontroller.
|
||||
*
|
||||
* \subsection pmc_use_case_2_usage_code Example code
|
||||
* Add to application C-file:
|
||||
* \code
|
||||
* pmc_switch_sclk_to_32kxtal(PMC_OSC_XTAL);
|
||||
* pmc_switch_pck_to_sclk(PMC_PCK_1, PMC_PCK_PRES_CLK_64);
|
||||
* pmc_enable_pck(PMC_PCK_1);
|
||||
*
|
||||
* for (;;)
|
||||
* {
|
||||
* // Do Nothing
|
||||
* }
|
||||
* \endcode
|
||||
*
|
||||
* \subsection pmc_use_case_2_usage_flow Workflow
|
||||
* -# Switch the Slow Clock source input to an external 32KHz crystal:
|
||||
* \code
|
||||
* pmc_switch_sclk_to_32kxtal(PMC_OSC_XTAL);
|
||||
* \endcode
|
||||
* -# Switch the Programmable Clock module PCK1 source clock to the Slow Clock,
|
||||
* with a prescaler of 64:
|
||||
* \code
|
||||
* pmc_switch_pck_to_sclk(PMC_PCK_1, PMC_PCK_PRES_CLK_64);
|
||||
* \endcode
|
||||
* -# Enable Programmable Clock module PCK1:
|
||||
* \code
|
||||
* pmc_enable_pck(PMC_PCK_1);
|
||||
* \endcode
|
||||
* -# Enter an infinite loop:
|
||||
* \code
|
||||
* for (;;)
|
||||
* {
|
||||
* // Do Nothing
|
||||
* }
|
||||
* \endcode
|
||||
*/
|
||||
|
||||
#endif /* PMC_H_INCLUDED */
|
||||
109
digistump-sam/system/libsam/include/pwmc.h
Normal file
109
digistump-sam/system/libsam/include/pwmc.h
Normal file
@@ -0,0 +1,109 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* \par Purpose
|
||||
*
|
||||
* Interface for configuration the Pulse Width Modulation Controller (PWM) peripheral.
|
||||
*
|
||||
* \par Usage
|
||||
*
|
||||
* -# Configures PWM clocks A & B to run at the given frequencies using
|
||||
* \ref PWMC_ConfigureClocks().
|
||||
* -# Configure PWMC channel using \ref PWMC_ConfigureChannel(), \ref PWMC_ConfigureChannelExt()
|
||||
* \ref PWMC_SetPeriod(), \ref PWMC_SetDutyCycle() and \ref PWMC_SetDeadTime().
|
||||
* -# Enable & disable channel using \ref PWMC_EnableChannel() and
|
||||
* \ref PWMC_DisableChannel().
|
||||
* -# Enable & disable the period interrupt for the given PWM channel using
|
||||
* \ref PWMC_EnableChannelIt() and \ref PWMC_DisableChannelIt().
|
||||
* -# Enable & disable the selected interrupts sources on a PWMC peripheral
|
||||
* using \ref PWMC_EnableIt() and \ref PWMC_DisableIt().
|
||||
* -# Control syncronous channel using \ref PWMC_ConfigureSyncChannel(),
|
||||
* \ref PWMC_SetSyncChannelUpdatePeriod() and \ref PWMC_SetSyncChannelUpdateUnlock().
|
||||
* -# Control PWM override output using \ref PWMC_SetOverrideValue(),
|
||||
* \ref PWMC_EnableOverrideOutput() and \ref PWMC_DisableOverrideOutput().
|
||||
* -# Send data through the transmitter using \ref PWMC_WriteBuffer().
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _PWMC_
|
||||
#define _PWMC_
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Headers
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Exported functions
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
extern void PWMC_ConfigureChannel( Pwm* pPwm, uint32_t ul_channel, uint32_t prescaler, uint32_t alignment, uint32_t polarity ) ;
|
||||
extern void PWMC_ConfigureChannelExt( Pwm* pPwm, uint32_t ul_channel, uint32_t prescaler, uint32_t alignment, uint32_t polarity,
|
||||
uint32_t countEventSelect, uint32_t DTEnable, uint32_t DTHInverte, uint32_t DTLInverte ) ;
|
||||
|
||||
extern void PWMC_ConfigureClocks(uint32_t clka, uint32_t clkb, uint32_t mck ) ;
|
||||
extern void PWMC_SetPeriod( Pwm* pPwm, uint32_t ul_channel, uint16_t period ) ;
|
||||
extern void PWMC_SetDutyCycle( Pwm* pPwm, uint32_t ul_channel, uint16_t duty ) ;
|
||||
extern void PWMC_SetDeadTime( Pwm* pPwm, uint32_t ul_channel, uint16_t timeH, uint16_t timeL ) ;
|
||||
extern void PWMC_ConfigureSyncChannel( Pwm* pPwm, uint32_t ul_channels, uint32_t updateMode, uint32_t requestMode, uint32_t requestComparisonSelect ) ;
|
||||
extern void PWMC_SetSyncChannelUpdatePeriod( Pwm* pPwm, uint8_t period ) ;
|
||||
extern void PWMC_SetSyncChannelUpdateUnlock( Pwm* pPwm ) ;
|
||||
extern void PWMC_EnableChannel( Pwm* pPwm, uint32_t ul_channel ) ;
|
||||
extern void PWMC_DisableChannel( Pwm* pPwm, uint32_t ul_channel ) ;
|
||||
extern void PWMC_EnableChannelIt( Pwm* pPwm, uint32_t ul_channel ) ;
|
||||
extern void PWMC_DisableChannelIt( Pwm* pPwm, uint32_t ul_channel ) ;
|
||||
extern void PWMC_EnableIt( Pwm* pPwm, uint32_t sources1, uint32_t sources2 ) ;
|
||||
extern void PWMC_DisableIt( Pwm* pPwm, uint32_t sources1, uint32_t sources2 ) ;
|
||||
extern uint8_t PWMC_WriteBuffer(Pwm *pwmc, void *buffer, uint32_t length ) ;
|
||||
extern void PWMC_SetOverrideValue( Pwm* pPwm, uint32_t value ) ;
|
||||
extern void PWMC_EnableOverrideOutput( Pwm* pPwm, uint32_t value, uint32_t sync ) ;
|
||||
extern void PWMC_DisableOverrideOutput( Pwm* pPwm, uint32_t value, uint32_t sync ) ;
|
||||
extern void PWMC_SetFaultMode( Pwm* pPwm, uint32_t mode ) ;
|
||||
extern void PWMC_FaultClear( Pwm* pPwm, uint32_t fault ) ;
|
||||
extern void PWMC_SetFaultProtectionValue( Pwm* pPwm, uint32_t value ) ;
|
||||
extern void PWMC_EnableFaultProtection( Pwm* pPwm, uint32_t ul_channel, uint32_t value ) ;
|
||||
extern void PWMC_ConfigureComparisonUnit( Pwm* pPwm, uint32_t x, uint32_t value, uint32_t mode ) ;
|
||||
extern void PWMC_ConfigureEventLineMode( Pwm* pPwm, uint32_t x, uint32_t mode ) ;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* #ifndef _PWMC_ */
|
||||
|
||||
78
digistump-sam/system/libsam/include/rstc.h
Normal file
78
digistump-sam/system/libsam/include/rstc.h
Normal file
@@ -0,0 +1,78 @@
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* \brief Reset Controller (RSTC) driver for SAM.
|
||||
*
|
||||
* Copyright (c) 2011-2012 Atmel Corporation. All rights reserved.
|
||||
*
|
||||
* \asf_license_start
|
||||
*
|
||||
* \page License
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of Atmel may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* 4. This software may only be redistributed and used in connection with an
|
||||
* Atmel microcontroller product.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* \asf_license_stop
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef RSTC_H_INCLUDED
|
||||
#define RSTC_H_INCLUDED
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** Definitions of Reset Controller Status */
|
||||
/** Reset cause */
|
||||
#define RSTC_GENERAL_RESET (0 << RSTC_SR_RSTTYP_Pos)
|
||||
#define RSTC_BACKUP_RESET (1 << RSTC_SR_RSTTYP_Pos)
|
||||
#define RSTC_WATCHDOG_RESET (2 << RSTC_SR_RSTTYP_Pos)
|
||||
#define RSTC_SOFTWARE_RESET (3 << RSTC_SR_RSTTYP_Pos)
|
||||
#define RSTC_USER_RESET (4 << RSTC_SR_RSTTYP_Pos)
|
||||
/** NRST Pin Level */
|
||||
#define RSTC_NRST_LOW (LOW << 16)
|
||||
#define RSTC_NRST_HIGH (HIGH << 16)
|
||||
|
||||
void rstc_set_external_reset(Rstc* p_rstc, const uint32_t ul_length);
|
||||
void rstc_enable_user_reset(Rstc* p_rstc);
|
||||
void rstc_disable_user_reset(Rstc* p_rstc);
|
||||
void rstc_enable_user_reset_interrupt(Rstc* p_rstc);
|
||||
void rstc_disable_user_reset_interrupt(Rstc* p_rstc);
|
||||
void rstc_start_software_reset(Rstc* p_rstc);
|
||||
void rstc_reset_extern(Rstc *p_rstc);
|
||||
uint32_t rstc_get_status(Rstc* p_rstc);
|
||||
uint32_t rstc_get_reset_cause(Rstc* p_rstc);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* RSTC_H_INCLUDED */
|
||||
97
digistump-sam/system/libsam/include/rtc.h
Normal file
97
digistump-sam/system/libsam/include/rtc.h
Normal file
@@ -0,0 +1,97 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* Interface for Real Time Clock (RTC) controller.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _RTC_
|
||||
#define _RTC_
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Headers
|
||||
*----------------------------------------------------------------------------*/
|
||||
#include "../chip.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Definitions
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
#define RTC_HOUR_BIT_LEN_MASK 0x3F
|
||||
#define RTC_MIN_BIT_LEN_MASK 0x7F
|
||||
#define RTC_SEC_BIT_LEN_MASK 0x7F
|
||||
#define RTC_CENT_BIT_LEN_MASK 0x7F
|
||||
#define RTC_YEAR_BIT_LEN_MASK 0xFF
|
||||
#define RTC_MONTH_BIT_LEN_MASK 0x1F
|
||||
#define RTC_DATE_BIT_LEN_MASK 0x3F
|
||||
#define RTC_WEEK_BIT_LEN_MASK 0x07
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Exported functions
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern void RTC_SetHourMode( Rtc* pRtc, uint32_t dwMode ) ;
|
||||
|
||||
extern uint32_t RTC_GetHourMode( Rtc* pRtc ) ;
|
||||
|
||||
extern void RTC_EnableIt( Rtc* pRtc, uint32_t dwSources ) ;
|
||||
|
||||
extern void RTC_DisableIt( Rtc* pRtc, uint32_t dwSources ) ;
|
||||
|
||||
extern int RTC_SetTime( Rtc* pRtc, uint8_t ucHour, uint8_t ucMinute, uint8_t ucSecond ) ;
|
||||
|
||||
extern void RTC_GetTime( Rtc* pRtc, uint8_t *pucHour, uint8_t *pucMinute, uint8_t *pucSecond ) ;
|
||||
|
||||
extern int RTC_SetTimeAlarm( Rtc* pRtc, uint8_t *pucHour, uint8_t *pucMinute, uint8_t *pucSecond ) ;
|
||||
|
||||
extern void RTC_GetDate( Rtc* pRtc, uint16_t *pwYear, uint8_t *pucMonth, uint8_t *pucDay, uint8_t *pucWeek ) ;
|
||||
|
||||
extern int RTC_SetDate( Rtc* pRtc, uint16_t wYear, uint8_t ucMonth, uint8_t ucDay, uint8_t ucWeek ) ;
|
||||
|
||||
extern int RTC_SetDateAlarm( Rtc* pRtc, uint8_t *pucMonth, uint8_t *pucDay ) ;
|
||||
|
||||
extern void RTC_ClearSCCR( Rtc* pRtc, uint32_t dwMask ) ;
|
||||
|
||||
extern uint32_t RTC_GetSR( Rtc* pRtc, uint32_t dwMask ) ;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* #ifndef _RTC_ */
|
||||
|
||||
82
digistump-sam/system/libsam/include/rtt.h
Normal file
82
digistump-sam/system/libsam/include/rtt.h
Normal file
@@ -0,0 +1,82 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* \par Purpose
|
||||
*
|
||||
* Interface for Real Time Timer (RTT) controller.
|
||||
*
|
||||
* \par Usage
|
||||
*
|
||||
* -# Changes the prescaler value of the given RTT and restarts it
|
||||
* using \ref RTT_SetPrescaler().
|
||||
* -# Get current value of the RTT using \ref RTT_GetTime().
|
||||
* -# Enables the specified RTT interrupt using \ref RTT_EnableIT().
|
||||
* -# Get the status register value of the given RTT using \ref RTT_GetStatus().
|
||||
* -# Configures the RTT to generate an alarm at the given time
|
||||
* using \ref RTT_SetAlarm().
|
||||
*/
|
||||
|
||||
#ifndef _RTT_
|
||||
#define _RTT_
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Headers
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Exported functions
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern void RTT_SetPrescaler( Rtt* pRtt, uint16_t wPrescaler ) ;
|
||||
|
||||
extern uint32_t RTT_GetTime( Rtt* pRtt ) ;
|
||||
|
||||
extern void RTT_EnableIT( Rtt* pRtt, uint32_t dwSources ) ;
|
||||
|
||||
extern uint32_t RTT_GetStatus( Rtt *pRtt ) ;
|
||||
|
||||
extern void RTT_SetAlarm( Rtt *pRtt, uint32_t dwTime ) ;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* #ifndef RTT_H */
|
||||
|
||||
117
digistump-sam/system/libsam/include/spi.h
Normal file
117
digistump-sam/system/libsam/include/spi.h
Normal file
@@ -0,0 +1,117 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* Interface for Serial Peripheral Interface (SPI) controller.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _SPI_
|
||||
#define _SPI_
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Headers
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Macros
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
*
|
||||
* Here are several macros which should be used when configuring a SPI
|
||||
* peripheral.
|
||||
*
|
||||
* \section spi_configuration_macros SPI Configuration Macros
|
||||
* - \ref SPI_PCS
|
||||
* - \ref SPI_SCBR
|
||||
* - \ref SPI_DLYBS
|
||||
* - \ref SPI_DLYBCT
|
||||
*/
|
||||
|
||||
/** Calculate the PCS field value given the chip select NPCS value */
|
||||
#define SPI_PCS(npcs) ((~(1 << (npcs)) & 0xF) << 16)
|
||||
|
||||
/** Calculates the value of the CSR SCBR field given the baudrate and MCK. */
|
||||
#define SPI_SCBR(baudrate, masterClock) ((uint32_t) ((masterClock) / (baudrate)) << 8)
|
||||
|
||||
/** Calculates the value of the CSR DLYBS field given the desired delay (in ns) */
|
||||
#define SPI_DLYBS(delay, masterClock) ((uint32_t) ((((masterClock) / 1000000) * (delay)) / 1000) << 16)
|
||||
|
||||
/** Calculates the value of the CSR DLYBCT field given the desired delay (in ns) */
|
||||
#define SPI_DLYBCT(delay, masterClock) ((uint32_t) ((((masterClock) / 1000000) * (delay)) / 32000) << 24)
|
||||
|
||||
/*------------------------------------------------------------------------------ */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Exported functions
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
extern void SPI_Enable( Spi* spi ) ;
|
||||
extern void SPI_Disable( Spi* spi ) ;
|
||||
extern void SPI_EnableIt( Spi* spi, uint32_t dwSources ) ;
|
||||
extern void SPI_DisableIt( Spi* spi, uint32_t dwSources ) ;
|
||||
|
||||
extern void SPI_Configure( Spi* spi, uint32_t dwId, uint32_t dwConfiguration ) ;
|
||||
extern void SPI_ConfigureNPCS( Spi* spi, uint32_t dwNpcs, uint32_t dwConfiguration ) ;
|
||||
|
||||
extern uint32_t SPI_Read( Spi* spi ) ;
|
||||
extern void SPI_Write( Spi* spi, uint32_t dwNpcs, uint16_t wData ) ;
|
||||
|
||||
extern uint32_t SPI_GetStatus( Spi* spi ) ;
|
||||
extern uint32_t SPI_IsFinished( Spi* pSpi ) ;
|
||||
|
||||
#if (defined _SAM3S_) || (defined _SAM3S8_) || (defined _SAM3N_)
|
||||
extern void SPI_PdcEnableTx( Spi* spi ) ;
|
||||
extern void SPI_PdcDisableTx( Spi* spi ) ;
|
||||
extern void SPI_PdcEnableRx( Spi* spi ) ;
|
||||
extern void SPI_PdcDisableRx( Spi* spi ) ;
|
||||
|
||||
extern void SPI_PdcSetTx( Spi* spi, void* pvTxBuf, uint32_t dwTxCount, void* pvTxNextBuf, uint32_t dwTxNextCount ) ;
|
||||
extern void SPI_PdcSetRx( Spi* spi, void* pvRxBuf, uint32_t dwRxCount, void* pvRxNextBuf, uint32_t dwRxNextCount ) ;
|
||||
|
||||
extern uint32_t SPI_WriteBuffer( Spi* spi, void* pvBuffer, uint32_t dwLength ) ;
|
||||
|
||||
extern uint32_t SPI_ReadBuffer( Spi* spi, void* pvBuffer, uint32_t dwLength ) ;
|
||||
#endif /* (defined _SAM3S_) || (defined _SAM3S8_) || (defined _SAM3N_) */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* #ifndef _SPI_ */
|
||||
|
||||
210
digistump-sam/system/libsam/include/ssc.h
Normal file
210
digistump-sam/system/libsam/include/ssc.h
Normal file
@@ -0,0 +1,210 @@
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* \brief Synchronous Serial Controller (SSC) driver for SAM.
|
||||
*
|
||||
* Copyright (c) 2011-2012 Atmel Corporation. All rights reserved.
|
||||
*
|
||||
* \asf_license_start
|
||||
*
|
||||
* \page License
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of Atmel may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* 4. This software may only be redistributed and used in connection with an
|
||||
* Atmel microcontroller product.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* \asf_license_stop
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SSC_H_INCLUDED
|
||||
#define SSC_H_INCLUDED
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
/// @cond 0
|
||||
/**INDENT-OFF**/
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**INDENT-ON**/
|
||||
/// @endcond
|
||||
|
||||
//! Receive stop selection.
|
||||
#define SSC_RX_STOP_COMPARE_0 0
|
||||
#define SSC_RX_STOP_COMPARE_0_1 1
|
||||
|
||||
//! Compare register ID.
|
||||
#define COMPARE_ID0 0
|
||||
#define COMPARE_ID1 1
|
||||
|
||||
//! SSC module default timeout. */
|
||||
#define SSC_DEFAULT_TIMEOUT 10000
|
||||
|
||||
//! \brief SSC driver return codes.
|
||||
enum ssc_return_code {
|
||||
SSC_RC_OK = 0, //!< OK
|
||||
SSC_RC_YES = 0, //!< Yes
|
||||
SSC_RC_NO = 1, //!< No
|
||||
SSC_RC_ERROR = 1, //!< General error
|
||||
SSC_RC_INVALID = 0xFFFFFFFF //!< Parameter invalid
|
||||
};
|
||||
|
||||
//! Data frame structure.
|
||||
typedef struct {
|
||||
//! Data bits length per transfer, should be 0 to 31.
|
||||
uint32_t ul_datlen;
|
||||
//! Bit sequence LSBF or MSBF.
|
||||
//! For receiver configuration, SSC_RFMR_MSBF or 0.
|
||||
//! For transmitter configuration, SSC_TFMR_MSBF or 0.
|
||||
uint32_t ul_msbf;
|
||||
//! Data number per frame, should be 0 to 15.
|
||||
uint32_t ul_datnb;
|
||||
//! Frame Sync. length should be 0 to 15.
|
||||
uint32_t ul_fslen;
|
||||
//! Frame Sync. length extension field, should be 0 to 15.
|
||||
uint32_t ul_fslen_ext;
|
||||
//! Frame Sync. output selection.
|
||||
//! For receiver configuration, one of SSC_RFMR_FSOS_NONE, SSC_RFMR_FSOS_NEGATIVE, SSC_RFMR_FSOS_POSITIVE,
|
||||
//! SSC_RFMR_FSOS_LOW, SSC_RFMR_FSOS_HIGH or SSC_RFMR_FSOS_TOGGLING.
|
||||
//! For transmitter configuration, one of SSC_TFMR_FSOS_NONE, SSC_TFMR_FSOS_NEGATIVE, SSC_TFMR_FSOS_POSITIVE
|
||||
//! SSC_TFMR_FSOS_LOW, SSC_TFMR_FSOS_HIGH, SSC_TFMR_FSOS_TOGGLING,
|
||||
uint32_t ul_fsos;
|
||||
//! Frame Sync. edge detection.
|
||||
//! For receiver configuration, SSC_RFMR_FSEDGE_POSITIVE or SSC_RFMR_FSEDGE_NEGATIVE.
|
||||
//! For transmitter configuration, SSC_TFMR_FSEDGE_POSITIVE or SSC_TFMR_FSEDGE_NEGATIVE.
|
||||
uint32_t ul_fsedge;
|
||||
} data_frame_opt_t;
|
||||
|
||||
//! Clock mode structure.
|
||||
typedef struct {
|
||||
//! Communication clock selection.
|
||||
//! For receiver configuration, one of SSC_RCMR_CKS_MCK, SSC_RCMR_CKS_TK or SSC_RCMR_CKS_RK.
|
||||
//! For transmitter configuration, one of SSC_TCMR_CKS_MCK, SSC_TCMR_CKS_TK or SSC_TCMR_CKS_RK.
|
||||
uint32_t ul_cks;
|
||||
//! Communication clock output mode selection.
|
||||
//! For receiver configuration, one of SSC_RCMR_CKO_NONE, SSC_RCMR_CKO_CONTINUOUS or SSC_RCMR_CKO_TRANSFER.
|
||||
//! For transmitter configuration, one of SSC_TCMR_CKO_NONE, SSC_TCMR_CKO_CONTINUOUS or SSC_TCMR_CKO_TRANSFER.
|
||||
uint32_t ul_cko;
|
||||
//! Communication clock inversion.
|
||||
//! For receiver configuration, SSC_RCMR_CKI or 0.
|
||||
//! For transmitter configuration, SSC_TCMR_CKI or 0.
|
||||
uint32_t ul_cki;
|
||||
//! Communication clock gating selection.
|
||||
//! For receiver configuration, one of SSC_RCMR_CKG_NONE, SSC_RCMR_CKG_CONTINUOUS and SSC_RCMR_CKG_TRANSFER.
|
||||
//! For transmitter configuration, one of SSC_TCMR_CKG_NONE, SSC_TCMR_CKG_CONTINUOUS and SSC_TCMR_CKG_TRANSFER.
|
||||
uint32_t ul_ckg;
|
||||
//! Period divider selection, should be 0 to 255.
|
||||
uint32_t ul_period;
|
||||
//! Communication start delay, should be 0 to 255.
|
||||
uint32_t ul_sttdly;
|
||||
//! Communication start selection.
|
||||
//! For receiver configuration, one of SSC_RCMR_START_CONTINUOUS, SSC_RCMR_START_TRANSMIT, SSC_RCMR_START_RF_LOW,
|
||||
//! SSC_RCMR_START_RF_HIGH, SSC_RCMR_START_RF_FALLING, SSC_RCMR_START_RF_RISING, SSC_RCMR_START_RF_LEVEL,
|
||||
//! SSC_RCMR_START_RF_EDGE or SSC_RCMR_START_CMP_0.
|
||||
//! For transmitter configuration, one of SSC_TCMR_START_CONTINUOUS, SSC_TCMR_START_TRANSMIT, SSC_TCMR_START_RF_LOW,
|
||||
//! SSC_TCMR_START_RF_HIGH, SSC_TCMR_START_RF_FALLING, SSC_TCMR_START_RF_RISING, SSC_TCMR_START_RF_LEVEL,
|
||||
//! SSC_TCMR_START_RF_EDGE or SSC_TCMR_START_CMP_0.
|
||||
uint32_t ul_start_sel;
|
||||
} clock_opt_t;
|
||||
|
||||
//! SSC working role in I2S mode.
|
||||
#define SSC_I2S_MASTER_OUT (1 << 0) //! Working mode for transmitter as master.
|
||||
#define SSC_I2S_MASTER_IN (1 << 1) //! Working mode for receiver as master.
|
||||
#define SSC_I2S_SLAVE_OUT (1 << 2) //! Working mode for transmitter as slave.
|
||||
#define SSC_I2S_SLAVE_IN (1 << 3) //! Working mode for receiver as slave.
|
||||
|
||||
//! Bit for SSC Audio channel left.
|
||||
#define SSC_AUDIO_CH_LEFT (1 << 0)
|
||||
//! Bit for SSC Audio channel right.
|
||||
#define SSC_AUDIO_CH_RIGHT (1 << 1)
|
||||
//! SSC Audio Channel modes.
|
||||
enum {
|
||||
//! Mono, left channel enabled.
|
||||
SSC_AUDIO_MONO_LEFT = (SSC_AUDIO_CH_LEFT),
|
||||
//! Mono, right channel enabled.
|
||||
SSC_AUDIO_MONO_RIGHT = (SSC_AUDIO_CH_RIGHT),
|
||||
//! Stereo, two channels.
|
||||
SSC_AUDIO_STERO = (SSC_AUDIO_CH_LEFT | SSC_AUDIO_CH_RIGHT)
|
||||
};
|
||||
|
||||
uint32_t ssc_set_clock_divider(Ssc *p_ssc, uint32_t ul_bitclock, uint32_t ul_mck);
|
||||
void ssc_i2s_set_transmitter(Ssc *p_ssc, uint32_t ul_mode,
|
||||
uint32_t ul_cks, uint32_t ul_ch_mode, uint32_t ul_datlen);
|
||||
void ssc_i2s_set_receiver(Ssc *p_ssc, uint32_t ul_mode,
|
||||
uint32_t ul_cks, uint32_t ul_ch_mode, uint32_t ul_datlen);
|
||||
void ssc_reset(Ssc *p_ssc);
|
||||
void ssc_enable_rx(Ssc *p_ssc);
|
||||
void ssc_disable_rx(Ssc *p_ssc);
|
||||
void ssc_enable_tx(Ssc *p_ssc);
|
||||
void ssc_disable_tx(Ssc *p_ssc);
|
||||
void ssc_set_normal_mode(Ssc *p_ssc);
|
||||
void ssc_set_loop_mode(Ssc *p_ssc);
|
||||
void ssc_set_rx_stop_selection(Ssc *p_ssc, uint32_t ul_sel);
|
||||
void ssc_set_td_default_level(Ssc *p_ssc, uint32_t ul_level);
|
||||
void ssc_enable_tx_frame_sync_data(Ssc *p_ssc);
|
||||
void ssc_disable_tx_frame_sync_data(Ssc *p_ssc);
|
||||
void ssc_set_receiver(Ssc *p_ssc, clock_opt_t *p_rx_clk_opt, data_frame_opt_t *p_rx_data_frame);
|
||||
void ssc_set_transmitter(Ssc *p_ssc, clock_opt_t *p_tx_clk_opt, data_frame_opt_t *p_tx_data_frame);
|
||||
void ssc_set_rx_compare(Ssc *p_ssc, uint32_t ul_id, uint32_t ul_value);
|
||||
uint32_t ssc_get_rx_compare(Ssc *p_ssc, uint32_t ul_id);
|
||||
void ssc_enable_interrupt(Ssc *p_ssc, uint32_t ul_sources);
|
||||
void ssc_disable_interrupt(Ssc *p_ssc, uint32_t ul_sources);
|
||||
uint32_t ssc_get_interrupt_mask(Ssc *p_ssc);
|
||||
uint32_t ssc_get_status(Ssc *p_ssc);
|
||||
uint32_t ssc_is_tx_ready(Ssc *p_ssc);
|
||||
uint32_t ssc_is_tx_empty(Ssc *p_ssc);
|
||||
uint32_t ssc_is_rx_ready(Ssc *p_ssc);
|
||||
uint32_t ssc_is_tx_enabled(Ssc *p_ssc);
|
||||
uint32_t ssc_is_rx_enabled(Ssc *p_ssc);
|
||||
#if (defined _SAM3S_) || (defined _SAM4S_)
|
||||
uint32_t ssc_is_rx_buf_end(Ssc *p_ssc);
|
||||
uint32_t ssc_is_tx_buf_end(Ssc *p_ssc);
|
||||
uint32_t ssc_is_rx_buf_full(Ssc *p_ssc);
|
||||
uint32_t ssc_is_tx_buf_empty(Ssc *p_ssc);
|
||||
Pdc *ssc_get_pdc_base(Ssc *p_ssc);
|
||||
#endif
|
||||
uint32_t ssc_write(Ssc *p_ssc, uint32_t ul_frame);
|
||||
uint32_t ssc_read(Ssc *p_ssc, uint32_t *ul_data);
|
||||
void ssc_write_sync_data(Ssc *p_ssc, uint32_t ul_frame);
|
||||
uint32_t ssc_read_sync_data(Ssc *p_ssc);
|
||||
#if ((defined _SAM3XA_) || (defined _SAM3U_))
|
||||
void *ssc_get_tx_access(Ssc *p_ssc);
|
||||
void *ssc_get_rx_access(Ssc *p_ssc);
|
||||
#endif
|
||||
void ssc_set_writeprotect(Ssc *p_ssc, uint32_t ul_enable);
|
||||
uint32_t ssc_get_writeprotect_status(Ssc *p_ssc);
|
||||
|
||||
/// @cond 0
|
||||
/**INDENT-OFF**/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
/**INDENT-ON**/
|
||||
/// @endcond
|
||||
|
||||
#endif /* SSC_H_INCLUDED */
|
||||
86
digistump-sam/system/libsam/include/tc.h
Normal file
86
digistump-sam/system/libsam/include/tc.h
Normal file
@@ -0,0 +1,86 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* \section Purpose
|
||||
*
|
||||
* Interface for configuring and using Timer Counter (TC) peripherals.
|
||||
*
|
||||
* \section Usage
|
||||
* -# Optionally, use TC_FindMckDivisor() to let the program find the best
|
||||
* TCCLKS field value automatically.
|
||||
* -# Configure a Timer Counter in the desired mode using TC_Configure().
|
||||
* -# Start or stop the timer clock using TC_Start() and TC_Stop().
|
||||
*/
|
||||
|
||||
#ifndef _TC_
|
||||
#define _TC_
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Headers
|
||||
*------------------------------------------------------------------------------*/
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Global functions
|
||||
*------------------------------------------------------------------------------*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern void TC_Configure( Tc *pTc, uint32_t dwChannel, uint32_t dwMode ) ;
|
||||
|
||||
extern void TC_Start( Tc *pTc, uint32_t dwChannel ) ;
|
||||
|
||||
extern void TC_Stop( Tc *pTc, uint32_t dwChannel ) ;
|
||||
|
||||
extern uint32_t TC_FindMckDivisor( uint32_t dwFreq, uint32_t dwMCk, uint32_t *dwDiv, uint32_t *dwTcClks, uint32_t dwBoardMCK ) ;
|
||||
|
||||
extern uint32_t TC_ReadCV(Tc *p_tc, uint32_t ul_channel);
|
||||
|
||||
extern uint32_t TC_GetStatus(Tc *p_tc, uint32_t ul_channel);
|
||||
|
||||
extern void TC_SetRA(Tc *tc, uint32_t chan, uint32_t v) ;
|
||||
|
||||
extern void TC_SetRB(Tc *tc, uint32_t chan, uint32_t v) ;
|
||||
|
||||
extern void TC_SetRC(Tc *tc, uint32_t chan, uint32_t v) ;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* #ifndef _TC_ */
|
||||
|
||||
78
digistump-sam/system/libsam/include/timetick.h
Normal file
78
digistump-sam/system/libsam/include/timetick.h
Normal file
@@ -0,0 +1,78 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* \par Purpose
|
||||
*
|
||||
* Methods and definitions for Global time tick and wait functions.
|
||||
*
|
||||
* Defines a common and simpliest use of Time Tick, to increase tickCount
|
||||
* every 1ms, the application can get this value through GetTickCount().
|
||||
*
|
||||
* \par Usage
|
||||
*
|
||||
* -# Configure the System Tick with TimeTick_Configure() when MCK changed
|
||||
* \note
|
||||
* Must be done before any invoke of GetTickCount(), Wait() or Sleep().
|
||||
* -# Uses GetTickCount to get current tick value.
|
||||
* -# Uses Wait to wait several ms.
|
||||
* -# Uses Sleep to enter wait for interrupt mode to wait several ms.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _TIMETICK_
|
||||
#define _TIMETICK_
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Headers
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Definitions
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Global functions
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
extern uint32_t TimeTick_Configure( uint32_t dwNew_MCK ) ;
|
||||
|
||||
extern void TimeTick_Increment( void ) ;
|
||||
|
||||
extern uint32_t GetTickCount( void ) ;
|
||||
|
||||
extern void Wait( volatile uint32_t dwMs ) ;
|
||||
|
||||
extern void Sleep( volatile uint32_t dwMs ) ;
|
||||
|
||||
#endif /* _TIMETICK_ */
|
||||
73
digistump-sam/system/libsam/include/trng.h
Normal file
73
digistump-sam/system/libsam/include/trng.h
Normal file
@@ -0,0 +1,73 @@
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* \brief API for SAM TRNG.
|
||||
*
|
||||
* Copyright (c) 2011-2012 Atmel Corporation. All rights reserved.
|
||||
*
|
||||
* \asf_license_start
|
||||
*
|
||||
* \page License
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of Atmel may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* 4. This software may only be redistributed and used in connection with an
|
||||
* Atmel microcontroller product.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* \asf_license_stop
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef TRNG_H_INCLUDED
|
||||
#define TRNG_H_INCLUDED
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
/// @cond 0
|
||||
/**INDENT-OFF**/
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**INDENT-ON**/
|
||||
/// @endcond
|
||||
|
||||
void trng_enable(Trng *p_trng);
|
||||
void trng_disable(Trng *p_trng);
|
||||
void trng_enable_interrupt(Trng *p_trng);
|
||||
void trng_disable_interrupt(Trng *p_trng);
|
||||
uint32_t trng_get_interrupt_mask(Trng *p_trng);
|
||||
uint32_t trng_get_interrupt_status(Trng *p_trng);
|
||||
uint32_t trng_read_output_data(Trng *p_trng);
|
||||
|
||||
/// @cond 0
|
||||
/**INDENT-OFF**/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
/**INDENT-ON**/
|
||||
/// @endcond
|
||||
|
||||
#endif /* TRNG_H_INCLUDED */
|
||||
111
digistump-sam/system/libsam/include/twi.h
Normal file
111
digistump-sam/system/libsam/include/twi.h
Normal file
@@ -0,0 +1,111 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* Interface for configuration the Two Wire Interface (TWI) peripheral.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _TWI_
|
||||
#define _TWI_
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Headers
|
||||
*------------------------------------------------------------------------------*/
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Macros
|
||||
*----------------------------------------------------------------------------*/
|
||||
/* Returns 1 if the TXRDY bit (ready to transmit data) is set in the given status register value.*/
|
||||
#define TWI_STATUS_TXRDY(status) (((status) & TWI_SR_TXRDY) == TWI_SR_TXRDY)
|
||||
|
||||
/* Returns 1 if the RXRDY bit (ready to receive data) is set in the given status register value.*/
|
||||
#define TWI_STATUS_RXRDY(status) (((status) & TWI_SR_RXRDY) == TWI_SR_RXRDY)
|
||||
|
||||
/* Returns 1 if the TXCOMP bit (transfer complete) is set in the given status register value.*/
|
||||
#define TWI_STATUS_TXCOMP(status) (((status) & TWI_SR_TXCOMP) == TWI_SR_TXCOMP)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* External function
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
extern void TWI_ConfigureMaster(Twi *pTwi, uint32_t twck, uint32_t mck);
|
||||
|
||||
extern void TWI_ConfigureSlave(Twi *pTwi, uint8_t slaveAddress);
|
||||
|
||||
extern void TWI_Stop(Twi *pTwi);
|
||||
|
||||
extern void TWI_StartRead(
|
||||
Twi *pTwi,
|
||||
uint8_t address,
|
||||
uint32_t iaddress,
|
||||
uint8_t isize);
|
||||
|
||||
extern uint8_t TWI_ReadByte(Twi *pTwi);
|
||||
|
||||
extern void TWI_WriteByte(Twi *pTwi, uint8_t byte);
|
||||
|
||||
extern void TWI_StartWrite(
|
||||
Twi *pTwi,
|
||||
uint8_t address,
|
||||
uint32_t iaddress,
|
||||
uint8_t isize,
|
||||
uint8_t byte);
|
||||
|
||||
extern uint8_t TWI_ByteReceived(Twi *pTwi);
|
||||
|
||||
extern uint8_t TWI_ByteSent(Twi *pTwi);
|
||||
|
||||
extern uint8_t TWI_TransferComplete(Twi *pTwi);
|
||||
|
||||
extern void TWI_EnableIt(Twi *pTwi, uint32_t sources);
|
||||
|
||||
extern void TWI_DisableIt(Twi *pTwi, uint32_t sources);
|
||||
|
||||
extern uint32_t TWI_GetStatus(Twi *pTwi);
|
||||
|
||||
extern uint32_t TWI_GetMaskedStatus(Twi *pTwi);
|
||||
|
||||
extern void TWI_SendSTOPCondition(Twi *pTwi);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* #ifndef _TWI_ */
|
||||
33
digistump-sam/system/libsam/include/udp.h
Normal file
33
digistump-sam/system/libsam/include/udp.h
Normal file
@@ -0,0 +1,33 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef UDPHS_H_INCLUDED
|
||||
#define UDPHS_H_INCLUDED
|
||||
|
||||
#endif /* UDPHS_H_INCLUDED */
|
||||
91
digistump-sam/system/libsam/include/udphs.h
Normal file
91
digistump-sam/system/libsam/include/udphs.h
Normal file
@@ -0,0 +1,91 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef UDPHS_H_INCLUDED
|
||||
#define UDPHS_H_INCLUDED
|
||||
|
||||
#define NUM_IT_MAX 3
|
||||
|
||||
#define EP_SINGLE_64 0x32 // EP0
|
||||
#define EP_DOUBLE_64 0x36 // Other endpoints
|
||||
|
||||
|
||||
// Endpoint 0:
|
||||
#define EP_TYPE_CONTROL UDPHS_EPTCFG_EPT_SIZE_64 \
|
||||
| UDPHS_EPTCFG_EPT_TYPE_CTRL8 \
|
||||
| UDPHS_EPTCFG_BK_NUMBER_1
|
||||
#ifdef CDC_ENABLED
|
||||
#define EP_TYPE_BULK_IN UDPHS_EPTCFG_EPT_SIZE_512 \
|
||||
| UDPHS_EPTCFG_EPT_DIR \
|
||||
| UDPHS_EPTCFG_EPT_TYPE_BULK \
|
||||
| UDPHS_EPTCFG_BK_NUMBER_2
|
||||
#define EP_TYPE_BULK_OUT UDPHS_EPTCFG_EPT_SIZE_512 \
|
||||
| UDPHS_EPTCFG_EPT_TYPE_BULK \
|
||||
| UDPHS_EPTCFG_BK_NUMBER_2
|
||||
#define EP_TYPE_INTERRUPT_IN UDPHS_EPTCFG_EPT_SIZE_64 \
|
||||
| UDPHS_EPTCFG_EPT_DIR \
|
||||
| UDPHS_EPTCFG_EPT_TYPE_INT \
|
||||
| UDPHS_EPTCFG_BK_NUMBER_2
|
||||
#endif
|
||||
|
||||
#ifdef HID_ENABLED
|
||||
#define EP_TYPE_INTERRUPT_IN_HID UDPHS_EPTCFG_EPT_SIZE_64 \
|
||||
| UDPHS_EPTCFG_EPT_DIR \
|
||||
| UDPHS_EPTCFG_EPT_TYPE_INT \
|
||||
| UDPHS_EPTCFG_BK_NUMBER_2
|
||||
#endif
|
||||
|
||||
#define EP_TYPE_INTERRUPT_OUT UDPHS_EPTCFG_EPT_SIZE_64 \
|
||||
| UDPHS_EPTCFG_EPT_TYPE_INT \
|
||||
| UDPHS_EPTCFG_EPT_TYPE_INT \
|
||||
| UDPHS_EPTCFG_BK_NUMBER_1
|
||||
#define EP_TYPE_ISOCHRONOUS_IN UDPHS_EPTCFG_EPT_SIZE_1024 \
|
||||
| UDPHS_EPTCFG_EPT_DIR \
|
||||
| UDPHS_EPTCFG_EPT_TYPE_ISO \
|
||||
| UDPHS_EPTCFG_BK_NUMBER_3
|
||||
#define EP_TYPE_ISOCHRONOUS_OUT UDPHS_EPTCFG_EPT_SIZE_1024 \
|
||||
| UDPHS_EPTCFG_EPT_TYPE_ISO \
|
||||
| UDPHS_EPTCFG_BK_NUMBER_3
|
||||
|
||||
|
||||
#ifndef TXLED1
|
||||
#define TXLED0
|
||||
#define RXLED0
|
||||
#define TXLED1
|
||||
#define RXLED1
|
||||
#endif
|
||||
|
||||
|
||||
#define UDFNUML ((UDPHS->UDPHS_FNUM & UDPHS_FNUM_FRAME_NUMBER_Msk)>>3)
|
||||
|
||||
#define USB_RECV_TIMEOUT
|
||||
|
||||
#define UDPHS_EPTFIFO (0x20180000) // (UDPHS_EPTFIFO) Base Address
|
||||
|
||||
#endif /* UDPHS_H_INCLUDED */
|
||||
751
digistump-sam/system/libsam/include/uotghs_device.h
Normal file
751
digistump-sam/system/libsam/include/uotghs_device.h
Normal file
@@ -0,0 +1,751 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef UOTGHS_DEVICE_H_INCLUDED
|
||||
#define UOTGHS_DEVICE_H_INCLUDED
|
||||
|
||||
|
||||
#define MAX_ENDPOINTS 10
|
||||
#define EP0 0
|
||||
#define EP0_SIZE 64
|
||||
#define EPX_SIZE 512
|
||||
|
||||
#define EP_SINGLE_64 (0x32UL) // EP0
|
||||
#define EP_DOUBLE_64 (0x36UL) // Other endpoints
|
||||
|
||||
// Control Endpoint
|
||||
#define EP_TYPE_CONTROL (UOTGHS_DEVEPTCFG_EPSIZE_64_BYTE | \
|
||||
UOTGHS_DEVEPTCFG_EPTYPE_CTRL | \
|
||||
UOTGHS_DEVEPTCFG_EPBK_1_BANK | \
|
||||
UOTGHS_DEVEPTCFG_NBTRANS_1_TRANS | \
|
||||
UOTGHS_DEVEPTCFG_ALLOC)
|
||||
|
||||
// CDC Endpoints
|
||||
#define EP_TYPE_BULK_IN (UOTGHS_DEVEPTCFG_EPSIZE_512_BYTE | \
|
||||
UOTGHS_DEVEPTCFG_EPDIR_IN | \
|
||||
UOTGHS_DEVEPTCFG_EPTYPE_BLK | \
|
||||
UOTGHS_DEVEPTCFG_EPBK_2_BANK | \
|
||||
UOTGHS_DEVEPTCFG_NBTRANS_1_TRANS | \
|
||||
UOTGHS_DEVEPTCFG_ALLOC)
|
||||
|
||||
#define EP_TYPE_BULK_OUT (UOTGHS_DEVEPTCFG_EPSIZE_512_BYTE | \
|
||||
UOTGHS_DEVEPTCFG_EPTYPE_BLK | \
|
||||
UOTGHS_DEVEPTCFG_EPBK_2_BANK | \
|
||||
UOTGHS_DEVEPTCFG_NBTRANS_1_TRANS | \
|
||||
UOTGHS_DEVEPTCFG_ALLOC)
|
||||
|
||||
#define EP_TYPE_INTERRUPT_IN (UOTGHS_DEVEPTCFG_EPSIZE_64_BYTE | \
|
||||
UOTGHS_DEVEPTCFG_EPDIR_IN | \
|
||||
UOTGHS_DEVEPTCFG_EPTYPE_INTRPT | \
|
||||
UOTGHS_DEVEPTCFG_EPBK_2_BANK | \
|
||||
UOTGHS_DEVEPTCFG_NBTRANS_1_TRANS | \
|
||||
UOTGHS_DEVEPTCFG_ALLOC)
|
||||
|
||||
// HID Endpoints
|
||||
#define EP_TYPE_INTERRUPT_IN_HID (UOTGHS_DEVEPTCFG_EPSIZE_64_BYTE | \
|
||||
UOTGHS_DEVEPTCFG_EPDIR_IN | \
|
||||
UOTGHS_DEVEPTCFG_EPTYPE_INTRPT | \
|
||||
UOTGHS_DEVEPTCFG_EPBK_2_BANK | \
|
||||
UOTGHS_DEVEPTCFG_NBTRANS_1_TRANS | \
|
||||
UOTGHS_DEVEPTCFG_ALLOC)
|
||||
|
||||
// Various definitions
|
||||
#define EP_TYPE_INTERRUPT_OUT (UOTGHS_DEVEPTCFG_EPSIZE_64_BYTE | \
|
||||
UOTGHS_DEVEPTCFG_EPTYPE_INTRPT | \
|
||||
UOTGHS_DEVEPTCFG_EPTYPE_INTRPT | \
|
||||
UOTGHS_DEVEPTCFG_EPBK_1_BANK | \
|
||||
UOTGHS_DEVEPTCFG_NBTRANS_1_TRANS | \
|
||||
UOTGHS_DEVEPTCFG_ALLOC)
|
||||
|
||||
#define EP_TYPE_ISOCHRONOUS_IN (UOTGHS_DEVEPTCFG_EPSIZE_1024_BYTE | \
|
||||
UOTGHS_DEVEPTCFG_EPDIR_IN | \
|
||||
UOTGHS_DEVEPTCFG_EPTYPE_ISO | \
|
||||
UOTGHS_DEVEPTCFG_EPBK_3_BANK | \
|
||||
UOTGHS_DEVEPTCFG_NBTRANS_3_TRANS | \
|
||||
UOTGHS_DEVEPTCFG_ALLOC)
|
||||
|
||||
#define EP_TYPE_ISOCHRONOUS_OUT (UOTGHS_DEVEPTCFG_EPSIZE_1024_BYTE | \
|
||||
UOTGHS_DEVEPTCFG_EPTYPE_ISO | \
|
||||
UOTGHS_DEVEPTCFG_EPBK_3_BANK | \
|
||||
UOTGHS_DEVEPTCFG_NBTRANS_3_TRANS | \
|
||||
UOTGHS_DEVEPTCFG_ALLOC)
|
||||
|
||||
//! \ingroup usb_device_group
|
||||
//! \defgroup udd_group USB Device Driver (UDD)
|
||||
//! UOTGHS low-level driver for USB device mode
|
||||
//!
|
||||
//! @{
|
||||
|
||||
#ifndef UOTGHS_DEVEPTCFG_EPDIR_Pos
|
||||
// Bit pos is not defined in SAM header file but we need it.
|
||||
# define UOTGHS_DEVEPTCFG_EPDIR_Pos 8
|
||||
#endif
|
||||
|
||||
//! @name UOTGHS Device IP properties
|
||||
//! These macros give access to IP properties
|
||||
//! @{
|
||||
//! Get maximal number of endpoints
|
||||
#define udd_get_endpoint_max_nbr() (9)
|
||||
#define UDD_MAX_PEP_NB (udd_get_endpoint_max_nbr() + 1)
|
||||
//! Get maximal number of banks of endpoints
|
||||
#define udd_get_endpoint_bank_max_nbr(ep) ((ep == 0) ? 1 : (( ep <= 2) ? 3 : 2))
|
||||
//! Get maximal size of endpoint (3X, 1024/64)
|
||||
#define udd_get_endpoint_size_max(ep) (((ep) == 0) ? 64 : 512) // for bulk
|
||||
//! Get DMA support of endpoints
|
||||
#define Is_udd_endpoint_dma_supported(ep) ((((ep) >= 1) && ((ep) <= 6)) ? true : false)
|
||||
//! Get High Band Width support of endpoints
|
||||
#define Is_udd_endpoint_high_bw_supported(ep) (((ep) >= 2) ? true : false)
|
||||
//! @}
|
||||
|
||||
//! @name UOTGHS Device speeds management
|
||||
//! @{
|
||||
//! Enable/disable device low-speed mode
|
||||
#define udd_low_speed_enable() (Set_bits(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_LS))
|
||||
#define udd_low_speed_disable() (Clr_bits(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_LS))
|
||||
//! Test if device low-speed mode is forced
|
||||
#define Is_udd_low_speed_enable() (Tst_bits(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_LS))
|
||||
|
||||
//! Enable high speed mode
|
||||
#define udd_high_speed_enable() (Wr_bitfield(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_SPDCONF_Msk, 0))
|
||||
//! Disable high speed mode
|
||||
#define udd_high_speed_disable() (Wr_bitfield(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_SPDCONF_Msk, 3))
|
||||
//! Test if controller is in full speed mode
|
||||
#define Is_udd_full_speed_mode() (Rd_bitfield(UOTGHS->UOTGHS_SR, UOTGHS_SR_SPEED_Msk) == UOTGHS_SR_SPEED_FULL_SPEED)
|
||||
//! @}
|
||||
|
||||
//! @name UOTGHS Device HS test mode management
|
||||
//! @{
|
||||
#ifdef UOTGHS_DEVCTRL_SPDCONF_HIGH_SPEED
|
||||
//! Enable high speed test mode
|
||||
# define udd_enable_hs_test_mode() (Wr_bitfield(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_SPDCONF_Msk, 2))
|
||||
# define udd_enable_hs_test_mode_j() (Set_bits(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_TSTJ))
|
||||
# define udd_enable_hs_test_mode_k() (Set_bits(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_TSTK))
|
||||
# define udd_enable_hs_test_mode_packet() (Set_bits(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_TSTPCKT))
|
||||
#endif
|
||||
//! @}
|
||||
|
||||
//! @name UOTGHS Device vbus management
|
||||
//! @{
|
||||
#define udd_enable_vbus_interrupt() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_VBUSTE))
|
||||
#define udd_disable_vbus_interrupt() (Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_VBUSTE))
|
||||
#define Is_udd_vbus_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_VBUSTE))
|
||||
#define Is_udd_vbus_high() (Tst_bits(UOTGHS->UOTGHS_SR, UOTGHS_SR_VBUS))
|
||||
#define Is_udd_vbus_low() (!Is_udd_vbus_high())
|
||||
#define udd_ack_vbus_transition() (UOTGHS->UOTGHS_SCR = UOTGHS_SCR_VBUSTIC)
|
||||
#define udd_raise_vbus_transition() (UOTGHS->UOTGHS_SFR = UOTGHS_SFR_VBUSTIS)
|
||||
#define Is_udd_vbus_transition() (Tst_bits(UOTGHS->UOTGHS_SR, UOTGHS_SR_VBUSTI))
|
||||
//! @}
|
||||
|
||||
|
||||
//! @name UOTGHS device attach control
|
||||
//! These macros manage the UOTGHS Device attach.
|
||||
//! @{
|
||||
//! Detaches from USB bus
|
||||
#define udd_detach_device() (Set_bits(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_DETACH))
|
||||
//! Attaches to USB bus
|
||||
#define udd_attach_device() (Clr_bits(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_DETACH))
|
||||
//! Test if the device is detached
|
||||
#define Is_udd_detached() (Tst_bits(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_DETACH))
|
||||
//! @}
|
||||
|
||||
|
||||
//! @name UOTGHS device bus events control
|
||||
//! These macros manage the UOTGHS Device bus events.
|
||||
//! @{
|
||||
|
||||
//! Initiates a remote wake-up event
|
||||
//! @{
|
||||
#define udd_initiate_remote_wake_up() (Set_bits(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_RMWKUP))
|
||||
#define Is_udd_pending_remote_wake_up() (Tst_bits(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_RMWKUP))
|
||||
//! @}
|
||||
|
||||
//! Manage upstream resume event (=remote wakeup)
|
||||
//! The USB driver sends a resume signal called "Upstream Resume"
|
||||
//! @{
|
||||
#define udd_enable_remote_wake_up_interrupt() (UOTGHS->UOTGHS_DEVIER = UOTGHS_DEVIER_UPRSMES)
|
||||
#define udd_disable_remote_wake_up_interrupt() (UOTGHS->UOTGHS_DEVIDR = UOTGHS_DEVIDR_UPRSMEC)
|
||||
#define Is_udd_remote_wake_up_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_DEVIMR, UOTGHS_DEVIMR_UPRSME))
|
||||
#define udd_ack_remote_wake_up_start() (UOTGHS->UOTGHS_DEVICR = UOTGHS_DEVICR_UPRSMC)
|
||||
#define udd_raise_remote_wake_up_start() (UOTGHS->UOTGHS_DEVIFR = UOTGHS_DEVIFR_UPRSMS)
|
||||
#define Is_udd_remote_wake_up_start() (Tst_bits(UOTGHS->UOTGHS_DEVISR, UOTGHS_DEVISR_UPRSM))
|
||||
//! @}
|
||||
|
||||
//! Manage downstream resume event (=remote wakeup from host)
|
||||
//! The USB controller detects a valid "End of Resume" signal initiated by the host
|
||||
//! @{
|
||||
#define udd_enable_resume_interrupt() (UOTGHS->UOTGHS_DEVIER = UOTGHS_DEVIER_EORSMES)
|
||||
#define udd_disable_resume_interrupt() (UOTGHS->UOTGHS_DEVIDR = UOTGHS_DEVIDR_EORSMEC)
|
||||
#define Is_udd_resume_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_DEVIMR, UOTGHS_DEVIMR_EORSME))
|
||||
#define udd_ack_resume() (UOTGHS->UOTGHS_DEVICR = UOTGHS_DEVICR_EORSMC)
|
||||
#define udd_raise_resume() (UOTGHS->UOTGHS_DEVIFR = UOTGHS_DEVIFR_EORSMS)
|
||||
#define Is_udd_resume() (Tst_bits(UOTGHS->UOTGHS_DEVISR, UOTGHS_DEVISR_EORSM))
|
||||
//! @}
|
||||
|
||||
//! Manage wake-up event (=usb line activity)
|
||||
//! The USB controller is reactivated by a filtered non-idle signal from the lines
|
||||
//! @{
|
||||
#define udd_enable_wake_up_interrupt() (UOTGHS->UOTGHS_DEVIER = UOTGHS_DEVIER_WAKEUPES)
|
||||
#define udd_disable_wake_up_interrupt() (UOTGHS->UOTGHS_DEVIDR = UOTGHS_DEVIDR_WAKEUPEC)
|
||||
#define Is_udd_wake_up_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_DEVIMR, UOTGHS_DEVIMR_WAKEUPE))
|
||||
#define udd_ack_wake_up() (UOTGHS->UOTGHS_DEVICR = UOTGHS_DEVICR_WAKEUPC)
|
||||
#define udd_raise_wake_up() (UOTGHS->UOTGHS_DEVIFR = UOTGHS_DEVIFR_WAKEUPS)
|
||||
#define Is_udd_wake_up() (Tst_bits(UOTGHS->UOTGHS_DEVISR, UOTGHS_DEVISR_WAKEUP))
|
||||
//! @}
|
||||
|
||||
//! Manage reset event
|
||||
//! Set when a USB "End of Reset" has been detected
|
||||
//! @{
|
||||
#define udd_enable_reset_interrupt() (UOTGHS->UOTGHS_DEVIER = UOTGHS_DEVIER_EORSTES)
|
||||
#define udd_disable_reset_interrupt() (UOTGHS->UOTGHS_DEVIDR = UOTGHS_DEVIDR_EORSTEC)
|
||||
#define Is_udd_reset_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_DEVIMR, UOTGHS_DEVIMR_EORSTE))
|
||||
#define udd_ack_reset() (UOTGHS->UOTGHS_DEVICR = UOTGHS_DEVICR_EORSTC)
|
||||
#define udd_raise_reset() (UOTGHS->UOTGHS_DEVIFR = UOTGHS_DEVIFR_EORSTS)
|
||||
#define Is_udd_reset() (Tst_bits(UOTGHS->UOTGHS_DEVISR, UOTGHS_DEVISR_EORST))
|
||||
//! @}
|
||||
|
||||
//! Manage start of frame event
|
||||
//! @{
|
||||
#define udd_enable_sof_interrupt() (UOTGHS->UOTGHS_DEVIER = UOTGHS_DEVIER_SOFES)
|
||||
#define udd_disable_sof_interrupt() (UOTGHS->UOTGHS_DEVIDR = UOTGHS_DEVIDR_SOFEC)
|
||||
#define Is_udd_sof_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_DEVIMR, UOTGHS_DEVIMR_SOFE))
|
||||
#define udd_ack_sof() (UOTGHS->UOTGHS_DEVICR = UOTGHS_DEVICR_SOFC)
|
||||
#define udd_raise_sof() (UOTGHS->UOTGHS_DEVIFR = UOTGHS_DEVIFR_SOFS)
|
||||
#define Is_udd_sof() (Tst_bits(UOTGHS->UOTGHS_DEVISR, UOTGHS_DEVISR_SOF))
|
||||
#define udd_frame_number() (Rd_bitfield(UOTGHS->UOTGHS_DEVFNUM, UOTGHS_DEVFNUM_FNUM_Msk))
|
||||
#define Is_udd_frame_number_crc_error() (Tst_bits(UOTGHS->UOTGHS_DEVFNUM, UOTGHS_DEVFNUM_FNCERR))
|
||||
//! @}
|
||||
|
||||
//! Manage Micro start of frame event (High Speed Only)
|
||||
//! @{
|
||||
#define udd_enable_msof_interrupt() (UOTGHS->UOTGHS_DEVIER = UOTGHS_DEVIER_MSOFES)
|
||||
#define udd_disable_msof_interrupt() (UOTGHS->UOTGHS_DEVIDR = UOTGHS_DEVIDR_MSOFEC)
|
||||
#define Is_udd_msof_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_DEVIMR, UOTGHS_DEVIMR_MSOFE))
|
||||
#define udd_ack_msof() (UOTGHS->UOTGHS_DEVICR = UOTGHS_DEVIMR_MSOFE)
|
||||
#define udd_raise_msof() (UOTGHS->UOTGHS_DEVIFR = UOTGHS_DEVIFR_MSOFS)
|
||||
#define Is_udd_msof() (Tst_bits(UOTGHS->UOTGHS_DEVISR, UOTGHS_DEVISR_MSOF))
|
||||
#define udd_micro_frame_number() \
|
||||
(Rd_bitfield(UOTGHS->UOTGHS_DEVFNUM, (UOTGHS_DEVFNUM_FNUM_Msk|UOTGHS_DEVFNUM_MFNUM_Msk)))
|
||||
//! @}
|
||||
|
||||
//! Manage suspend event
|
||||
//! @{
|
||||
#define udd_enable_suspend_interrupt() (UOTGHS->UOTGHS_DEVIER = UOTGHS_DEVIER_SUSPES)
|
||||
#define udd_disable_suspend_interrupt() (UOTGHS->UOTGHS_DEVIDR = UOTGHS_DEVIDR_SUSPEC)
|
||||
#define Is_udd_suspend_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_DEVIMR, UOTGHS_DEVIMR_SUSPE))
|
||||
#define udd_ack_suspend() (UOTGHS->UOTGHS_DEVICR = UOTGHS_DEVICR_SUSPC)
|
||||
#define udd_raise_suspend() (UOTGHS->UOTGHS_DEVIFR = UOTGHS_DEVIFR_SUSPS)
|
||||
#define Is_udd_suspend() (Tst_bits(UOTGHS->UOTGHS_DEVISR, UOTGHS_DEVISR_SUSP))
|
||||
//! @}
|
||||
|
||||
//! @}
|
||||
|
||||
//! @name UOTGHS device address control
|
||||
//! These macros manage the UOTGHS Device address.
|
||||
//! @{
|
||||
//! enables USB device address
|
||||
#define udd_enable_address() (Set_bits(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_ADDEN))
|
||||
//! disables USB device address
|
||||
#define udd_disable_address() (Clr_bits(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_ADDEN))
|
||||
#define Is_udd_address_enabled() (Tst_bits(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_ADDEN))
|
||||
//! configures the USB device address
|
||||
#define udd_configure_address(addr) (Wr_bitfield(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_UADD_Msk, addr))
|
||||
//! gets the currently configured USB device address
|
||||
#define udd_get_configured_address() (Rd_bitfield(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_UADD_Msk))
|
||||
//! @}
|
||||
|
||||
|
||||
//! @name UOTGHS Device endpoint drivers
|
||||
//! These macros manage the common features of the endpoints.
|
||||
//! @{
|
||||
|
||||
//! Generic macro for UOTGHS registers that can be arrayed
|
||||
//! @{
|
||||
#define UOTGHS_ARRAY(reg,index) ((&(UOTGHS->reg))[(index)])
|
||||
//! @}
|
||||
|
||||
//! @name UOTGHS Device endpoint configuration
|
||||
//! @{
|
||||
//! enables the selected endpoint
|
||||
#define udd_enable_endpoint(ep) (Set_bits(UOTGHS->UOTGHS_DEVEPT, UOTGHS_DEVEPT_EPEN0 << (ep)))
|
||||
//! disables the selected endpoint
|
||||
#define udd_disable_endpoint(ep) (Clr_bits(UOTGHS->UOTGHS_DEVEPT, UOTGHS_DEVEPT_EPEN0 << (ep)))
|
||||
//! tests if the selected endpoint is enabled
|
||||
#define Is_udd_endpoint_enabled(ep) (Tst_bits(UOTGHS->UOTGHS_DEVEPT, UOTGHS_DEVEPT_EPEN0 << (ep)))
|
||||
//! resets the selected endpoint
|
||||
#define udd_reset_endpoint(ep) \
|
||||
do { \
|
||||
Set_bits(UOTGHS->UOTGHS_DEVEPT, UOTGHS_DEVEPT_EPRST0 << (ep)); \
|
||||
Clr_bits(UOTGHS->UOTGHS_DEVEPT, UOTGHS_DEVEPT_EPRST0 << (ep)); \
|
||||
} while (0)
|
||||
//! Tests if the selected endpoint is being reset
|
||||
#define Is_udd_resetting_endpoint(ep) (Tst_bits(UOTGHS->UOTGHS_DEVEPT, UOTGHS_DEVEPT_EPRST0 << (ep)))
|
||||
|
||||
//! Configures the selected endpoint type
|
||||
#define udd_configure_endpoint_type(ep, type) (Wr_bitfield(UOTGHS_ARRAY(UOTGHS_DEVEPTCFG[0], ep), UOTGHS_DEVEPTCFG_EPTYPE_Msk, type))
|
||||
//! Gets the configured selected endpoint type
|
||||
#define udd_get_endpoint_type(ep) (Rd_bitfield(UOTGHS_ARRAY(UOTGHS_DEVEPTCFG[0], ep), UOTGHS_DEVEPTCFG_EPTYPE_Msk))
|
||||
//! Enables the bank autoswitch for the selected endpoint
|
||||
#define udd_enable_endpoint_bank_autoswitch(ep) (Set_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTCFG[0], ep), UOTGHS_DEVEPTCFG_AUTOSW))
|
||||
//! Disables the bank autoswitch for the selected endpoint
|
||||
#define udd_disable_endpoint_bank_autoswitch(ep) (Clr_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTCFG[0], ep), UOTGHS_DEVEPTCFG_AUTOSW))
|
||||
#define Is_udd_endpoint_bank_autoswitch_enabled(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTCFG[0], ep), UOTGHS_DEVEPTCFG_AUTOSW))
|
||||
//! Configures the selected endpoint direction
|
||||
#define udd_configure_endpoint_direction(ep, dir) (Wr_bitfield(UOTGHS_ARRAY(UOTGHS_DEVEPTCFG[0], ep), UOTGHS_DEVEPTCFG_EPDIR, dir))
|
||||
//! Gets the configured selected endpoint direction
|
||||
#define udd_get_endpoint_direction(ep) (Rd_bitfield(UOTGHS_ARRAY(UOTGHS_DEVEPTCFG[0], ep), UOTGHS_DEVEPTCFG_EPDIR))
|
||||
#define Is_udd_endpoint_in(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTCFG[0], ep), UOTGHS_DEVEPTCFG_EPDIR))
|
||||
//! Bounds given integer size to allowed range and rounds it up to the nearest
|
||||
//! available greater size, then applies register format of UOTGHS controller
|
||||
//! for endpoint size bit-field.
|
||||
#define udd_format_endpoint_size(size) (32 - clz(((uint32_t)min(max(size, 8), 1024) << 1) - 1) - 1 - 3)
|
||||
//! Configures the selected endpoint size
|
||||
#define udd_configure_endpoint_size(ep, size) (Wr_bitfield(UOTGHS_ARRAY(UOTGHS_DEVEPTCFG[0], ep), UOTGHS_DEVEPTCFG_EPSIZE_Msk, udd_format_endpoint_size(size)))
|
||||
//! Gets the configured selected endpoint size
|
||||
#define udd_get_endpoint_size(ep) (8 << Rd_bitfield(UOTGHS_ARRAY(UOTGHS_DEVEPTCFG[0], ep), UOTGHS_DEVEPTCFG_EPSIZE_Msk))
|
||||
//! Configures the selected endpoint number of banks
|
||||
#define udd_configure_endpoint_bank(ep, bank) (Wr_bitfield(UOTGHS_ARRAY(UOTGHS_DEVEPTCFG[0], ep), UOTGHS_DEVEPTCFG_EPBK_Msk, bank))
|
||||
//! Gets the configured selected endpoint number of banks
|
||||
#define udd_get_endpoint_bank(ep) (Rd_bitfield(UOTGHS_ARRAY(UOTGHS_DEVEPTCFG[0], ep), UOTGHS_DEVEPTCFG_EPBK_Msk)+1)
|
||||
//! Allocates the configuration selected endpoint in DPRAM memory
|
||||
#define udd_allocate_memory(ep) (Set_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTCFG[0], ep), UOTGHS_DEVEPTCFG_ALLOC))
|
||||
//! un-allocates the configuration selected endpoint in DPRAM memory
|
||||
#define udd_unallocate_memory(ep) (Clr_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTCFG[0], ep), UOTGHS_DEVEPTCFG_ALLOC))
|
||||
#define Is_udd_memory_allocated(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTCFG[0], ep), UOTGHS_DEVEPTCFG_ALLOC))
|
||||
|
||||
//! Configures selected endpoint in one step
|
||||
#define udd_configure_endpoint(ep, type, dir, size, bank) (\
|
||||
Wr_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTCFG[0], ep), UOTGHS_DEVEPTCFG_EPTYPE_Msk |\
|
||||
UOTGHS_DEVEPTCFG_EPDIR |\
|
||||
UOTGHS_DEVEPTCFG_EPSIZE_Msk |\
|
||||
UOTGHS_DEVEPTCFG_EPBK_Msk , \
|
||||
(((uint32_t)(type) << UOTGHS_DEVEPTCFG_EPTYPE_Pos) & UOTGHS_DEVEPTCFG_EPTYPE_Msk) |\
|
||||
(((uint32_t)(dir ) << UOTGHS_DEVEPTCFG_EPDIR_Pos ) & UOTGHS_DEVEPTCFG_EPDIR) |\
|
||||
( (uint32_t)udd_format_endpoint_size(size) << UOTGHS_DEVEPTCFG_EPSIZE_Pos) |\
|
||||
(((uint32_t)(bank) << UOTGHS_DEVEPTCFG_EPBK_Pos) & UOTGHS_DEVEPTCFG_EPBK_Msk))\
|
||||
)
|
||||
//! Tests if current endpoint is configured
|
||||
#define Is_udd_endpoint_configured(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_CFGOK))
|
||||
//! Returns the control direction
|
||||
#define udd_control_direction() (Rd_bitfield(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], EP_CONTROL), UOTGHS_DEVEPTISR_CTRLDIR))
|
||||
|
||||
//! Resets the data toggle sequence
|
||||
#define udd_reset_data_toggle(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIER[0], ep) = UOTGHS_DEVEPTIER_RSTDTS)
|
||||
//! Tests if the data toggle sequence is being reset
|
||||
#define Is_udd_data_toggle_reset(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_RSTDT))
|
||||
//! Returns data toggle
|
||||
#define udd_data_toggle(ep) (Rd_bitfield(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_DTSEQ_Msk))
|
||||
//! @}
|
||||
|
||||
|
||||
//! @name UOTGHS Device control endpoint
|
||||
//! These macros control the endpoints.
|
||||
//! @{
|
||||
|
||||
//! @name UOTGHS Device control endpoint interrupts
|
||||
//! These macros control the endpoints interrupts.
|
||||
//! @{
|
||||
//! Enables the selected endpoint interrupt
|
||||
#define udd_enable_endpoint_interrupt(ep) (UOTGHS->UOTGHS_DEVIER = UOTGHS_DEVIER_PEP_0 << (ep))
|
||||
//! Disables the selected endpoint interrupt
|
||||
#define udd_disable_endpoint_interrupt(ep) (UOTGHS->UOTGHS_DEVIDR = UOTGHS_DEVIDR_PEP_0 << (ep))
|
||||
//! Tests if the selected endpoint interrupt is enabled
|
||||
#define Is_udd_endpoint_interrupt_enabled(ep) (Tst_bits(UOTGHS->UOTGHS_DEVIMR, UOTGHS_DEVIMR_PEP_0 << (ep)))
|
||||
//! Tests if an interrupt is triggered by the selected endpoint
|
||||
#define Is_udd_endpoint_interrupt(ep) (Tst_bits(UOTGHS->UOTGHS_DEVISR, UOTGHS_DEVISR_PEP_0 << (ep)))
|
||||
//! Returns the lowest endpoint number generating an endpoint interrupt or MAX_PEP_NB if none
|
||||
#define udd_get_interrupt_endpoint_number() (ctz(((UOTGHS->UOTGHS_DEVISR >> UOTGHS_DEVISR_PEP_Pos) & \
|
||||
(UOTGHS->UOTGHS_DEVIMR >> UOTGHS_DEVIMR_PEP_Pos)) | \
|
||||
(1 << MAX_PEP_NB)))
|
||||
#define UOTGHS_DEVISR_PEP_Pos 12
|
||||
#define UOTGHS_DEVIMR_PEP_Pos 12
|
||||
//! @}
|
||||
|
||||
//! @name UOTGHS Device control endpoint errors
|
||||
//! These macros control the endpoint errors.
|
||||
//! @{
|
||||
//! Enables the STALL handshake
|
||||
#define udd_enable_stall_handshake(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIER[0], ep) = UOTGHS_DEVEPTIER_STALLRQS)
|
||||
//! Disables the STALL handshake
|
||||
#define udd_disable_stall_handshake(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIDR[0], ep) = UOTGHS_DEVEPTIDR_STALLRQC)
|
||||
//! Tests if STALL handshake request is running
|
||||
#define Is_udd_endpoint_stall_requested(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_STALLRQ))
|
||||
//! Tests if STALL sent
|
||||
#define Is_udd_stall(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_STALLEDI))
|
||||
//! ACKs STALL sent
|
||||
#define udd_ack_stall(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTICR[0], ep) = UOTGHS_DEVEPTICR_STALLEDIC)
|
||||
//! Raises STALL sent
|
||||
#define udd_raise_stall(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIFR[0], ep) = UOTGHS_DEVEPTIFR_STALLEDIS)
|
||||
//! Enables STALL sent interrupt
|
||||
#define udd_enable_stall_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIER[0], ep) = UOTGHS_DEVEPTIER_STALLEDES)
|
||||
//! Disables STALL sent interrupt
|
||||
#define udd_disable_stall_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIDR[0], ep) = UOTGHS_DEVEPTIDR_STALLEDEC)
|
||||
//! Tests if STALL sent interrupt is enabled
|
||||
#define Is_udd_stall_interrupt_enabled(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_STALLEDE))
|
||||
|
||||
//! Tests if NAK OUT received
|
||||
#define Is_udd_nak_out(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_NAKOUTI))
|
||||
//! ACKs NAK OUT received
|
||||
#define udd_ack_nak_out(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTICR[0], ep) = UOTGHS_DEVEPTICR_NAKOUTIC)
|
||||
//! Raises NAK OUT received
|
||||
#define udd_raise_nak_out(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIFR[0], ep) = UOTGHS_DEVEPTIFR_NAKOUTIS)
|
||||
//! Enables NAK OUT interrupt
|
||||
#define udd_enable_nak_out_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIER[0], ep) = UOTGHS_DEVEPTIER_NAKOUTES)
|
||||
//! Disables NAK OUT interrupt
|
||||
#define udd_disable_nak_out_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIDR[0], ep) = UOTGHS_DEVEPTIDR_NAKOUTEC)
|
||||
//! Tests if NAK OUT interrupt is enabled
|
||||
#define Is_udd_nak_out_interrupt_enabled(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_NAKOUTE))
|
||||
|
||||
//! Tests if NAK IN received
|
||||
#define Is_udd_nak_in(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_NAKINI))
|
||||
//! ACKs NAK IN received
|
||||
#define udd_ack_nak_in(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTICR[0], ep) = UOTGHS_DEVEPTICR_NAKINIC)
|
||||
//! Raises NAK IN received
|
||||
#define udd_raise_nak_in(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIFR[0], ep) = UOTGHS_DEVEPTIFR_NAKINIS)
|
||||
//! Enables NAK IN interrupt
|
||||
#define udd_enable_nak_in_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIER[0], ep) = UOTGHS_DEVEPTIER_NAKINES)
|
||||
//! Disables NAK IN interrupt
|
||||
#define udd_disable_nak_in_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIDR[0], ep) = UOTGHS_DEVEPTIDR_NAKINEC)
|
||||
//! Tests if NAK IN interrupt is enabled
|
||||
#define Is_udd_nak_in_interrupt_enabled(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_NAKINE))
|
||||
|
||||
//! ACKs endpoint isochronous overflow interrupt
|
||||
#define udd_ack_overflow_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTICR[0], ep) = UOTGHS_DEVEPTICR_OVERFIC)
|
||||
//! Raises endpoint isochronous overflow interrupt
|
||||
#define udd_raise_overflow_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIFR[0], ep) = UOTGHS_DEVEPTIFR_OVERFIS)
|
||||
//! Tests if an overflow occurs
|
||||
#define Is_udd_overflow(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_OVERFI))
|
||||
//! Enables overflow interrupt
|
||||
#define udd_enable_overflow_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIER[0], ep) = UOTGHS_DEVEPTIER_OVERFES)
|
||||
//! Disables overflow interrupt
|
||||
#define udd_disable_overflow_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIDR[0], ep) = UOTGHS_DEVEPTIDR_OVERFEC)
|
||||
//! Tests if overflow interrupt is enabled
|
||||
#define Is_udd_overflow_interrupt_enabled(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_OVERFE))
|
||||
|
||||
//! ACKs endpoint isochronous underflow interrupt
|
||||
#define udd_ack_underflow_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTICR[0], ep) = UOTGHS_DEVEPTICR_UNDERFIC)
|
||||
//! Raises endpoint isochronous underflow interrupt
|
||||
#define udd_raise_underflow_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIFR[0], ep) = UOTGHS_DEVEPTIFR_UNDERFIS)
|
||||
//! Tests if an underflow occurs
|
||||
#define Is_udd_underflow(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_UNDERFI))
|
||||
//! Enables underflow interrupt
|
||||
#define udd_enable_underflow_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIER[0], ep) = UOTGHS_DEVEPTIER_UNDERFES)
|
||||
//! Disables underflow interrupt
|
||||
#define udd_disable_underflow_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIDR[0], ep) = UOTGHS_DEVEPTIDR_UNDERFEC)
|
||||
//! Tests if underflow interrupt is enabled
|
||||
#define Is_udd_underflow_interrupt_enabled(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_UNDERFE))
|
||||
|
||||
//! Tests if CRC ERROR ISO OUT detected
|
||||
#define Is_udd_crc_error(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_CRCERRI))
|
||||
//! ACKs CRC ERROR ISO OUT detected
|
||||
#define udd_ack_crc_error(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTICR[0], ep) = UOTGHS_DEVEPTICR_CRCERRIC)
|
||||
//! Raises CRC ERROR ISO OUT detected
|
||||
#define udd_raise_crc_error(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIFR[0], ep) = UOTGHS_DEVEPTIFR_CRCERRIS)
|
||||
//! Enables CRC ERROR ISO OUT detected interrupt
|
||||
#define udd_enable_crc_error_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIER[0], ep) = UOTGHS_DEVEPTIER_CRCERRES)
|
||||
//! Disables CRC ERROR ISO OUT detected interrupt
|
||||
#define udd_disable_crc_error_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIDR[0], ep) = UOTGHS_DEVEPTIDR_CRCERREC)
|
||||
//! Tests if CRC ERROR ISO OUT detected interrupt is enabled
|
||||
#define Is_udd_crc_error_interrupt_enabled(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_CRCERRE))
|
||||
//! @}
|
||||
|
||||
//! @name UOTGHS Device control endpoint transfer
|
||||
//! These macros control the endpoint transfer.
|
||||
//! @{
|
||||
|
||||
//! Tests if endpoint read allowed
|
||||
#define Is_udd_read_enabled(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_RWALL))
|
||||
//! Tests if endpoint write allowed
|
||||
#define Is_udd_write_enabled(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_RWALL))
|
||||
|
||||
//! Returns the byte count
|
||||
#define udd_byte_count(ep) (Rd_bitfield(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_BYCT_Msk))
|
||||
//! Clears FIFOCON bit
|
||||
#define udd_ack_fifocon(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIDR[0], ep) = UOTGHS_DEVEPTIDR_FIFOCONC)
|
||||
//! Tests if FIFOCON bit set
|
||||
#define Is_udd_fifocon(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_FIFOCON))
|
||||
|
||||
//! Returns the number of busy banks
|
||||
#define udd_nb_busy_bank(ep) (Rd_bitfield(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_NBUSYBK_Msk))
|
||||
//! Returns the number of the current bank
|
||||
#define udd_current_bank(ep) (Rd_bitfield(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_CURRBK_Msk))
|
||||
//! Kills last bank
|
||||
#define udd_kill_last_in_bank(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIER[0], ep) = UOTGHS_DEVEPTIER_KILLBKS)
|
||||
#define Is_udd_kill_last(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_KILLBK))
|
||||
//! Tests if last bank killed
|
||||
#define Is_udd_last_in_bank_killed(ep) (!Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_KILLBK))
|
||||
//! Forces all banks full (OUT) or free (IN) interrupt
|
||||
#define udd_force_bank_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIFR[0], ep) = UOTGHS_DEVEPTIFR_NBUSYBKS)
|
||||
//! Unforces all banks full (OUT) or free (IN) interrupt
|
||||
#define udd_unforce_bank_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIFR[0], ep) = UOTGHS_DEVEPTIFR_NBUSYBKS)
|
||||
//! Enables all banks full (OUT) or free (IN) interrupt
|
||||
#define udd_enable_bank_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIER[0], ep) = UOTGHS_DEVEPTIER_NBUSYBKES)
|
||||
//! Disables all banks full (OUT) or free (IN) interrupt
|
||||
#define udd_disable_bank_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIDR[0], ep) = UOTGHS_DEVEPTIDR_NBUSYBKEC)
|
||||
//! Tests if all banks full (OUT) or free (IN) interrupt enabled
|
||||
#define Is_udd_bank_interrupt_enabled(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_NBUSYBKE))
|
||||
|
||||
//! Tests if SHORT PACKET received
|
||||
#define Is_udd_short_packet(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_SHORTPACKET))
|
||||
//! ACKs SHORT PACKET received
|
||||
#define udd_ack_short_packet(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTICR[0], ep) = UOTGHS_DEVEPTICR_SHORTPACKETC)
|
||||
//! Raises SHORT PACKET received
|
||||
#define udd_raise_short_packet(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIFR[0], ep) = UOTGHS_DEVEPTIFR_SHORTPACKETS)
|
||||
//! Enables SHORT PACKET received interrupt
|
||||
#define udd_enable_short_packet_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIER[0], ep) = UOTGHS_DEVEPTIER_SHORTPACKETES)
|
||||
//! Disables SHORT PACKET received interrupt
|
||||
#define udd_disable_short_packet_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIDR[0], ep) = UOTGHS_DEVEPTIDR_SHORTPACKETEC)
|
||||
//! Tests if SHORT PACKET received interrupt is enabled
|
||||
#define Is_udd_short_packet_interrupt_enabled(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_SHORTPACKETE))
|
||||
|
||||
//! Tests if SETUP received
|
||||
#define Is_udd_setup_received(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_RXSTPI))
|
||||
//! ACKs SETUP received
|
||||
#define udd_ack_setup_received(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTICR[0], ep) = UOTGHS_DEVEPTICR_RXSTPIC)
|
||||
//! Raises SETUP received
|
||||
#define udd_raise_setup_received(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIFR[0], ep) = UOTGHS_DEVEPTIFR_RXSTPIS)
|
||||
//! Enables SETUP received interrupt
|
||||
#define udd_enable_setup_received_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIER[0], ep) = UOTGHS_DEVEPTIER_RXSTPES)
|
||||
//! Disables SETUP received interrupt
|
||||
#define udd_disable_setup_received_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIDR[0], ep) = UOTGHS_DEVEPTIDR_RXSTPEC)
|
||||
//! Tests if SETUP received interrupt is enabled
|
||||
#define Is_udd_setup_received_interrupt_enabled(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_RXSTPE))
|
||||
|
||||
//! Tests if OUT received
|
||||
#define Is_udd_out_received(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_RXOUTI))
|
||||
//! ACKs OUT received
|
||||
#define udd_ack_out_received(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTICR[0], ep) = UOTGHS_DEVEPTICR_RXOUTIC)
|
||||
//! Raises OUT received
|
||||
#define udd_raise_out_received(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIFR[0], ep) = UOTGHS_DEVEPTIFR_RXOUTIS)
|
||||
//! Enables OUT received interrupt
|
||||
#define udd_enable_out_received_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIER[0], ep) = UOTGHS_DEVEPTIER_RXOUTES)
|
||||
//! Disables OUT received interrupt
|
||||
#define udd_disable_out_received_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIDR[0], ep) = UOTGHS_DEVEPTIDR_RXOUTEC)
|
||||
//! Tests if OUT received interrupt is enabled
|
||||
#define Is_udd_out_received_interrupt_enabled(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_RXOUTE))
|
||||
|
||||
//! Tests if IN sending
|
||||
#define Is_udd_in_send(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_TXINI))
|
||||
//! ACKs IN sending
|
||||
#define udd_ack_in_send(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTICR[0], ep) = UOTGHS_DEVEPTICR_TXINIC)
|
||||
//! Raises IN sending
|
||||
#define udd_raise_in_send(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIFR[0], ep) = UOTGHS_DEVEPTIFR_TXINIS)
|
||||
//! Enables IN sending interrupt
|
||||
#define udd_enable_in_send_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIER[0], ep) = UOTGHS_DEVEPTIER_TXINES)
|
||||
//! Disables IN sending interrupt
|
||||
#define udd_disable_in_send_interrupt(ep) (UOTGHS_ARRAY(UOTGHS_DEVEPTIDR[0], ep) = UOTGHS_DEVEPTIDR_TXINEC)
|
||||
//! Tests if IN sending interrupt is enabled
|
||||
#define Is_udd_in_send_interrupt_enabled(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_TXINE))
|
||||
|
||||
|
||||
//! 8-bit access to FIFO data register of selected endpoint.
|
||||
//! @param ep Endpoint of which to access FIFO data register
|
||||
//! @return Volatile 8-bit data pointer to FIFO data register
|
||||
//! @warning It is up to the user of this macro to make sure that all accesses
|
||||
//! are aligned with their natural boundaries
|
||||
//! @warning It is up to the user of this macro to make sure that used HSB
|
||||
//! addresses are identical to the DPRAM internal pointer modulo 32 bits.
|
||||
#define udd_get_endpoint_fifo_access8(ep) \
|
||||
(((volatile uint8_t (*)[0x8000])UOTGHS_RAM_ADDR)[(ep)])
|
||||
|
||||
//! @}
|
||||
|
||||
/*********************************************************************************************************************/
|
||||
|
||||
//! @name UOTGHS IP properties
|
||||
//! These macros give access to IP properties (not defined in 3X)
|
||||
//! @{
|
||||
//! Get IP name part 1 or 2
|
||||
#define otg_get_ip_name()
|
||||
#define otg_data_memory_barrier()
|
||||
//! Get IP version
|
||||
#define otg_get_ip_version()
|
||||
//! Get DPRAM size (FIFO maximal size) in bytes
|
||||
#define otg_get_dpram_size()
|
||||
//! Get size of USBB PB address space
|
||||
#define otg_get_ip_paddress_size()
|
||||
//! @}
|
||||
|
||||
//! @name UOTGHS OTG ID pin management
|
||||
//! The ID pin come from the USB OTG connector (A and B receptable) and
|
||||
//! allows to select the USB mode host or device.
|
||||
//! The USBB hardware can manage it automaticaly. This feature is optional.
|
||||
//! When otg_ID_PIN equals true in conf_usb_host.h, the USB_ID must be defined in board.h.
|
||||
//!
|
||||
//! @{
|
||||
//! PIO, PIO ID and MASK for USB_ID according to configuration from OTG_ID
|
||||
#define OTG_ID_PIN USB_ID_GPIO
|
||||
#define OTG_ID_FUNCTION USB_ID_FLAGS
|
||||
//! Input USB_ID from its pin
|
||||
#define otg_input_id_pin() do { \
|
||||
pio_configure_pin(OTG_ID_PIN, OTG_ID_FUNCTION); \
|
||||
} while (0)
|
||||
|
||||
//! Enable external OTG_ID pin (listened to by USB)
|
||||
#define otg_enable_id_pin() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_UIDE))
|
||||
//! Disable external OTG_ID pin (ignored by USB)
|
||||
#define otg_disable_id_pin() (Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_UIDE))
|
||||
//! Test if external OTG_ID pin enabled (listened to by USB)
|
||||
#define Is_otg_id_pin_enabled() (Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_UIDE))
|
||||
//! Disable external OTG_ID pin and force device mode
|
||||
#define otg_force_device_mode() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_UIMOD), otg_disable_id_pin())
|
||||
//! Test if device mode is forced
|
||||
#define Is_otg_device_mode_forced() (!Is_otg_id_pin_enabled() && Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_UIMOD))
|
||||
//! Disable external OTG_ID pin and force host mode
|
||||
#define otg_force_host_mode() (Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_UIMOD), otg_disable_id_pin())
|
||||
//! Test if host mode is forced
|
||||
#define Is_otg_host_mode_forced() (!Is_otg_id_pin_enabled() && !Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_UIMOD))
|
||||
|
||||
//! @name UOTGHS OTG ID pin interrupt management
|
||||
//! These macros manage the ID pin interrupt
|
||||
//! @{
|
||||
#define otg_enable_id_interrupt() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_IDTE))
|
||||
#define otg_disable_id_interrupt() (Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_IDTE))
|
||||
#define Is_otg_id_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_IDTE))
|
||||
#define Is_otg_id_device() (Tst_bits(UOTGHS->UOTGHS_SR, UOTGHS_SR_ID))
|
||||
#define Is_otg_id_host() (!Is_otg_id_device())
|
||||
#define otg_ack_id_transition() (UOTGHS->UOTGHS_SCR = UOTGHS_SCR_IDTIC)
|
||||
#define otg_raise_id_transition() (UOTGHS->UOTGHS_SFR = UOTGHS_SFR_IDTIS)
|
||||
#define Is_otg_id_transition() (Tst_bits(UOTGHS->UOTGHS_SR, UOTGHS_SR_IDTI))
|
||||
//! @}
|
||||
|
||||
//! @name USBB OTG Vbus management
|
||||
//! @{
|
||||
#define otg_enable_vbus_interrupt() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_VBUSTE))
|
||||
#define otg_disable_vbus_interrupt() (Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_VBUSTE))
|
||||
#define Is_otg_vbus_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_VBUSTE))
|
||||
#define Is_otg_vbus_high() (Tst_bits(UOTGHS->UOTGHS_SR, UOTGHS_SR_VBUS))
|
||||
#define Is_otg_vbus_low() (!Is_otg_vbus_high())
|
||||
#define otg_ack_vbus_transition() (UOTGHS->UOTGHS_SCR = UOTGHS_SCR_VBUSTIC)
|
||||
#define otg_raise_vbus_transition() (UOTGHS->UOTGHS_SFR = UOTGHS_SFR_VBUSTIS)
|
||||
#define Is_otg_vbus_transition() (Tst_bits(UOTGHS->UOTGHS_SR, UOTGHS_SR_VBUSTI))
|
||||
//! @}
|
||||
|
||||
//! @name UOTGHS OTG main management
|
||||
//! These macros allows to enable/disable pad and UOTGHS hardware
|
||||
//! @{
|
||||
//! Enable USB macro
|
||||
#define otg_enable() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_USBE))
|
||||
//! Disable USB macro
|
||||
#define otg_disable() (Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_USBE))
|
||||
#define Is_otg_enabled() (Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_USBE))
|
||||
|
||||
//! Enable OTG pad
|
||||
#define otg_enable_pad() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_OTGPADE))
|
||||
//! Disable OTG pad
|
||||
#define otg_disable_pad() (Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_OTGPADE))
|
||||
#define Is_otg_pad_enabled() (Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_OTGPADE))
|
||||
|
||||
//! Check Clock Usable
|
||||
//! For parts with HS feature, this one corresponding at UTMI clock
|
||||
#define Is_otg_clock_usable() (Tst_bits(UOTGHS->UOTGHS_SR, UOTGHS_SR_CLKUSABLE))
|
||||
|
||||
//! Stop (freeze) internal USB clock
|
||||
#define otg_freeze_clock() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_FRZCLK))
|
||||
#define otg_unfreeze_clock() (Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_FRZCLK))
|
||||
#define Is_otg_clock_frozen() (Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_FRZCLK))
|
||||
|
||||
//! Configure time-out of specified OTG timer
|
||||
#define otg_configure_timeout(timer, timeout) (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_UNLOCK),\
|
||||
Wr_bitfield(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_TIMPAGE_Msk, timer),\
|
||||
Wr_bitfield(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_TIMVALUE_Msk, timeout),\
|
||||
Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_UNLOCK))
|
||||
//! Get configured time-out of specified OTG timer
|
||||
#define otg_get_timeout(timer) (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_UNLOCK),\
|
||||
Wr_bitfield(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_TIMPAGE_Msk, timer),\
|
||||
Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_UNLOCK),\
|
||||
Rd_bitfield(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_TIMVALUE_Msk))
|
||||
|
||||
|
||||
//! Get the dual-role device state of the internal USB finite state machine of the UOTGHS controller
|
||||
#define otg_get_fsm_drd_state() (Rd_bitfield(UOTGHS->UOTGHS_FSM, UOTGHS_FSM_DRDSTATE_Msk))
|
||||
//! @}
|
||||
|
||||
//! @name UOTGHS OTG hardware protocol
|
||||
//! These macros manages the hardware OTG protocol
|
||||
//! @{
|
||||
//! Initiates a Host Negociation Protocol
|
||||
#define otg_device_initiate_hnp() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_HNPREQ))
|
||||
//! Accepts a Host Negociation Protocol
|
||||
#define otg_host_accept_hnp() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_HNPREQ))
|
||||
//! Rejects a Host Negociation Protocol
|
||||
#define otg_host_reject_hnp() (Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_HNPREQ))
|
||||
//! initiates a Session Request Protocol
|
||||
#define otg_device_initiate_srp() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_SRPREQ))
|
||||
//! Selects VBus as SRP method
|
||||
#define otg_select_vbus_srp_method() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_SRPSEL))
|
||||
#define Is_otg_vbus_srp_method_selected() (Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_SRPSEL))
|
||||
//! Selects data line as SRP method
|
||||
#define otg_select_data_srp_method() (Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_SRPSEL))
|
||||
#define Is_otg_data_srp_method_selected() (!Is_otg_vbus_srp_method_selected())
|
||||
//! Tests if a HNP occurs
|
||||
#define Is_otg_hnp() (Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_HNPREQ))
|
||||
//! Tests if a SRP from device occurs
|
||||
#define Is_otg_device_srp() (Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_SRPREQ))
|
||||
|
||||
//! Enables HNP error interrupt
|
||||
#define otg_enable_hnp_error_interrupt() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_HNPERRE))
|
||||
//! Disables HNP error interrupt
|
||||
#define otg_disable_hnp_error_interrupt() (Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_HNPERRE))
|
||||
#define Is_otg_hnp_error_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_HNPERRE))
|
||||
//! ACKs HNP error interrupt
|
||||
#define otg_ack_hnp_error_interrupt() (UOTGHS->UOTGHS_SCR = UOTGHS_SCR_HNPERRIC)
|
||||
//! Raises HNP error interrupt
|
||||
#define otg_raise_hnp_error_interrupt() (UOTGHS->UOTGHS_SFR = UOTGHS_SFR_HNPERRIS)
|
||||
//! Tests if a HNP error occurs
|
||||
#define Is_otg_hnp_error_interrupt() (Tst_bits(UOTGHS->UOTGHS_SR, UOTGHS_SR_HNPERRI))
|
||||
|
||||
//! Enables role exchange interrupt
|
||||
#define otg_enable_role_exchange_interrupt() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_ROLEEXE))
|
||||
//! Disables role exchange interrupt
|
||||
#define otg_disable_role_exchange_interrupt() (Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_ROLEEXE))
|
||||
#define Is_otg_role_exchange_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_ROLEEXE))
|
||||
//! ACKs role exchange interrupt
|
||||
#define otg_ack_role_exchange_interrupt() (UOTGHS->UOTGHS_SCR = UOTGHS_SCR_ROLEEXIC)
|
||||
//! Raises role exchange interrupt
|
||||
#define otg_raise_role_exchange_interrupt() (UOTGHS->UOTGHS_SFR = UOTGHS_SFR_ROLEEXIS)
|
||||
//! Tests if a role exchange occurs
|
||||
#define Is_otg_role_exchange_interrupt() (Tst_bits(UOTGHS->UOTGHS_SR, UOTGHS_SR_ROLEEXI))
|
||||
|
||||
//! Eenables SRP interrupt
|
||||
#define otg_enable_srp_interrupt() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_SRPE))
|
||||
//! Disables SRP interrupt
|
||||
#define otg_disable_srp_interrupt() (Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_SRPE))
|
||||
#define Is_otg_srp_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_SRPE))
|
||||
//! ACKs SRP interrupt
|
||||
#define otg_ack_srp_interrupt() (UOTGHS->UOTGHS_SCR = UOTGHS_SCR_SRPIC)
|
||||
//! Raises SRP interrupt
|
||||
#define otg_raise_srp_interrupt() (UOTGHS->UOTGHS_SFR = UOTGHS_SFR_SRPIS)
|
||||
//! Tests if a SRP occurs
|
||||
#define Is_otg_srp_interrupt() (Tst_bits(UOTGHS->UOTGHS_SR, UOTGHS_SR_SRPI))
|
||||
//! @}
|
||||
|
||||
//! @}
|
||||
|
||||
|
||||
#endif /* UOTGHS_DEVICE_H_INCLUDED */
|
||||
389
digistump-sam/system/libsam/include/uotghs_host.h
Normal file
389
digistump-sam/system/libsam/include/uotghs_host.h
Normal file
@@ -0,0 +1,389 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef UOTGHS_HOST_H_INCLUDED
|
||||
#define UOTGHS_HOST_H_INCLUDED
|
||||
|
||||
//! \ingroup usb_host_group
|
||||
//! \defgroup uhd_group USB Host Driver (UHD)
|
||||
//! UOTGHS low-level driver for USB host mode
|
||||
//!
|
||||
//! @{
|
||||
|
||||
//! @name UOTGHS Host IP properties
|
||||
//!
|
||||
//! @{
|
||||
//! Get maximal number of endpoints
|
||||
#define uhd_get_pipe_max_nbr() (9)
|
||||
#define UOTGHS_EPT_NUM (uhd_get_pipe_max_nbr()+1)
|
||||
//! @}
|
||||
|
||||
//! @name Host Vbus line control
|
||||
//!
|
||||
//! VBOF is an optional output pin which allows to enable or disable
|
||||
//! the external VBus generator.
|
||||
//!
|
||||
//! @{
|
||||
//! Enables hardware control of USB_VBOF output pin when a Vbus error occur
|
||||
#define uhd_enable_vbus_error_hw_control() (Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_VBUSHWC))
|
||||
//! Disables hardware control of USB_VBOF output pin when a Vbus error occur
|
||||
#define uhd_disable_vbus_error_hw_control() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_VBUSHWC))
|
||||
|
||||
//! Pin and function for USB_VBOF according to configuration from USB_VBOF
|
||||
#define USB_VBOF_PIN USB_VBOF_GPIO
|
||||
#define USB_VBOF_FUNCTION USB_VBOF_FLAGS
|
||||
//! Output USB_VBOF onto its pin
|
||||
#define uhd_output_vbof_pin() do {\
|
||||
pio_configure_pin(USB_VBOF_PIN, USB_VBOF_FUNCTION); \
|
||||
} while (0)
|
||||
|
||||
//! Set USB_VBOF output pin polarity
|
||||
#define uhd_set_vbof_active_high() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_VBUSPO))
|
||||
#define uhd_set_vbof_active_low() (Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_VBUSPO))
|
||||
//! Requests VBus activation
|
||||
#define uhd_enable_vbus() (Set_bits(UOTGHS->UOTGHS_SFR, UOTGHS_SR_VBUSRQ))
|
||||
//! Requests VBus deactivation
|
||||
#define uhd_disable_vbus() (Set_bits(UOTGHS->UOTGHS_SCR, UOTGHS_SR_VBUSRQ))
|
||||
//! Tests if VBus activation has been requested
|
||||
#define Is_uhd_vbus_enabled() (Tst_bits(UOTGHS->UOTGHS_SR, UOTGHS_SR_VBUSRQ))
|
||||
//! @}
|
||||
|
||||
//! @name Host Vbus line monitoring
|
||||
//!
|
||||
//! The VBus level is always checked by USBC hardware.
|
||||
//!
|
||||
//! @{
|
||||
#define uhd_enable_vbus_error_interrupt() (Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_VBERRE))
|
||||
#define uhd_disable_vbus_error_interrupt() (Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_VBERRE))
|
||||
#define Is_uhd_vbus_error_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_VBERRE))
|
||||
#define uhd_ack_vbus_error_interrupt() (Set_bits(UOTGHS->UOTGHS_SCR, UOTGHS_SCR_VBERRIC))
|
||||
#define Is_uhd_vbus_error_interrupt() (Tst_bits(UOTGHS->UOTGHS_SR, UOTGHS_SR_VBERRI))
|
||||
//! @}
|
||||
|
||||
#define uhd_ack_errors_interrupt() (UOTGHS->UOTGHS_SCR = (UOTGHS_SCR_VBERRIC|UOTGHS_SCR_BCERRIC|UOTGHS_SCR_HNPERRIC|UOTGHS_SCR_STOIC))
|
||||
#define Is_uhd_errors_interrupt() (Tst_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_VBERRE|UOTGHS_CTRL_BCERRE|UOTGHS_CTRL_HNPERRE|UOTGHS_CTRL_STOE))
|
||||
#define uhd_enable_suspend_error_interrupt()
|
||||
#define uhd_enable_hnp_error_interrupt()
|
||||
#define uhd_enable_bconn_error_interrupt()
|
||||
|
||||
//! @name USB device connection/disconnection monitoring
|
||||
//! @{
|
||||
#define uhd_enable_connection_int() (UOTGHS->UOTGHS_HSTIER = UOTGHS_HSTIER_DCONNIES)
|
||||
#define uhd_disable_connection_int() (UOTGHS->UOTGHS_HSTIDR = UOTGHS_HSTIDR_DCONNIEC)
|
||||
#define Is_uhd_connection_int_enabled() (Tst_bits(UOTGHS->UOTGHS_HSTIMR, UOTGHS_HSTIMR_DCONNIE))
|
||||
#define uhd_ack_connection() (UOTGHS->UOTGHS_HSTICR = UOTGHS_HSTICR_DCONNIC)
|
||||
#define Is_uhd_connection() (Tst_bits(UOTGHS->UOTGHS_HSTISR, UOTGHS_HSTISR_DCONNI))
|
||||
|
||||
#define uhd_enable_disconnection_int() (UOTGHS->UOTGHS_HSTIER = UOTGHS_HSTIER_DDISCIES)
|
||||
#define uhd_disable_disconnection_int() (UOTGHS->UOTGHS_HSTIDR = UOTGHS_HSTIDR_DDISCIEC)
|
||||
#define Is_uhd_disconnection_int_enabled() (Tst_bits(UOTGHS->UOTGHS_HSTIMR, UOTGHS_HSTIMR_DDISCIE))
|
||||
#define uhd_ack_disconnection() (UOTGHS->UOTGHS_HSTICR = UOTGHS_HSTICR_DDISCIC)
|
||||
#define Is_uhd_disconnection() (Tst_bits(UOTGHS->UOTGHS_HSTISR, UOTGHS_HSTISR_DDISCI))
|
||||
//! @}
|
||||
|
||||
//! @name USB device speed control
|
||||
//! @{
|
||||
#define uhd_get_speed_mode() (Rd_bits(UOTGHS->UOTGHS_SR, UOTGHS_SR_SPEED_Msk))
|
||||
#define Is_uhd_low_speed_mode() (uhd_get_speed_mode() == UOTGHS_SR_SPEED_LOW_SPEED)
|
||||
#define Is_uhd_full_speed_mode() (uhd_get_speed_mode() == UOTGHS_SR_SPEED_FULL_SPEED)
|
||||
#define Is_uhd_high_speed_mode() (uhd_get_speed_mode() == UOTGHS_SR_SPEED_HIGH_SPEED)
|
||||
//! Enable high speed mode
|
||||
# define uhd_enable_high_speed_mode() (Wr_bits(UOTGHS->UOTGHS_HSTCTRL, UOTGHS_HSTCTRL_SPDCONF_Msk, UOTGHS_HSTCTRL_SPDCONF_HIGH_SPEED))
|
||||
//! Disable high speed mode
|
||||
# define uhd_disable_high_speed_mode() (Wr_bits(UOTGHS->UOTGHS_HSTCTRL, UOTGHS_HSTCTRL_SPDCONF_Msk, UOTGHS_HSTCTRL_SPDCONF_FORCED_FS))
|
||||
//! @}
|
||||
|
||||
//! @name Bus events control
|
||||
//! These macros manage the bus events: reset, SOF, resume, wakeup.
|
||||
//! @{
|
||||
|
||||
//! Initiates a reset event
|
||||
//! @{
|
||||
#define uhd_start_reset() (Set_bits(UOTGHS->UOTGHS_HSTCTRL, UOTGHS_HSTCTRL_RESET))
|
||||
#define Is_uhd_starting_reset() (Tst_bits(UOTGHS->UOTGHS_HSTCTRL, UOTGHS_HSTCTRL_RESET))
|
||||
#define uhd_stop_reset() (Clr_bits(UOTGHS->UOTGHS_HSTCTRL, UOTGHS_HSTCTRL_RESET))
|
||||
|
||||
#define uhd_enable_reset_sent_interrupt() (UOTGHS->UOTGHS_HSTIER = UOTGHS_HSTIER_RSTIES)
|
||||
#define uhd_disable_reset_sent_interrupt() (UOTGHS->UOTGHS_HSTIDR = UOTGHS_HSTIDR_RSTIEC)
|
||||
#define Is_uhd_reset_sent_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_HSTIMR, UOTGHS_HSTIMR_RSTIE))
|
||||
#define uhd_ack_reset_sent() (UOTGHS->UOTGHS_HSTICR = UOTGHS_HSTICR_RSTIC)
|
||||
#define Is_uhd_reset_sent() (Tst_bits(UOTGHS->UOTGHS_HSTISR, UOTGHS_HSTISR_RSTI))
|
||||
//! @}
|
||||
|
||||
//! Initiates a SOF events
|
||||
//! @{
|
||||
#define uhd_enable_sof() (Set_bits(UOTGHS->UOTGHS_HSTCTRL, UOTGHS_HSTCTRL_SOFE))
|
||||
#define uhd_disable_sof() (Clr_bits(UOTGHS->UOTGHS_HSTCTRL, UOTGHS_HSTCTRL_SOFE))
|
||||
#define Is_uhd_sof_enabled() (Tst_bits(UOTGHS->UOTGHS_HSTCTRL, UOTGHS_HSTCTRL_SOFE))
|
||||
#define uhd_get_sof_number() ((UOTGHS->UOTGHS_HSTFNUM&UOTGHS_HSTFNUM_FNUM_Msk)>>UOTGHS_HSTFNUM_FNUM_Pos)
|
||||
#define uhd_get_microsof_number() ((UOTGHS->UOTGHS_HSTFNUM&UOTGHS_HSTFNUM_MFNUM_Msk)>>UOTGHS_HSTFNUM_MFNUM_Pos)
|
||||
#define uhd_get_frame_position() (Rd_bits(UOTGHS->UOTGHS_HSTFNUM, UOTGHS_HSTFNUM_FLENHIGH_Msk))
|
||||
#define uhd_enable_sof_interrupt() (UOTGHS->UOTGHS_HSTIER = UOTGHS_HSTIER_HSOFIES)
|
||||
#define uhd_disable_sof_interrupt() (UOTGHS->UOTGHS_HSTIDR = UOTGHS_HSTIDR_HSOFIEC)
|
||||
#define Is_uhd_sof_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_HSTIMR, UOTGHS_HSTIMR_HSOFIE))
|
||||
#define uhd_ack_sof() (UOTGHS->UOTGHS_HSTICR = UOTGHS_HSTICR_HSOFIC)
|
||||
#define Is_uhd_sof() (Tst_bits(UOTGHS->UOTGHS_HSTISR, UOTGHS_HSTISR_HSOFI))
|
||||
//! @}
|
||||
|
||||
//! Initiates a resume event
|
||||
//! It is called downstream resume event.
|
||||
//! @{
|
||||
#define uhd_send_resume() (Set_bits(UOTGHS->UOTGHS_HSTCTRL, UOTGHS_HSTCTRL_RESUME))
|
||||
#define Is_uhd_sending_resume() (Tst_bits(UOTGHS->UOTGHS_HSTCTRL, UOTGHS_HSTCTRL_RESUME))
|
||||
|
||||
#define uhd_enable_downstream_resume_interrupt() (UOTGHS->UOTGHS_HSTIER = UOTGHS_HSTIER_RSMEDIES)
|
||||
#define uhd_disable_downstream_resume_interrupt() (UOTGHS->UOTGHS_HSTIDR = UOTGHS_HSTIDR_RSMEDIEC)
|
||||
#define Is_uhd_downstream_resume_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_HSTIMR, UOTGHS_HSTIMR_RSMEDIE))
|
||||
#define uhd_ack_downstream_resume() (UOTGHS->UOTGHS_HSTICR = UOTGHS_HSTICR_RSMEDIC)
|
||||
#define Is_uhd_downstream_resume() (Tst_bits(UOTGHS->UOTGHS_HSTISR, UOTGHS_HSTISR_RSMEDI))
|
||||
//! @}
|
||||
|
||||
//! Detection of a wake-up event
|
||||
//! A wake-up event is received when the host controller is in the suspend mode:
|
||||
//! - and an upstream resume from the peripheral is detected.
|
||||
//! - and a peripheral disconnection is detected.
|
||||
//! @{
|
||||
#define uhd_enable_wakeup_interrupt() (UOTGHS->UOTGHS_HSTIER = UOTGHS_HSTIER_HWUPIES)
|
||||
#define uhd_disable_wakeup_interrupt() (UOTGHS->UOTGHS_HSTIDR = UOTGHS_HSTIDR_HWUPIEC)
|
||||
#define Is_uhd_wakeup_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_HSTIMR, UOTGHS_HSTIMR_HWUPIE))
|
||||
#define uhd_ack_wakeup() (UOTGHS->UOTGHS_HSTICR = UOTGHS_HSTICR_HWUPIC)
|
||||
#define Is_uhd_wakeup() (Tst_bits(UOTGHS->UOTGHS_HSTISR, UOTGHS_HSTISR_HWUPI))
|
||||
|
||||
#define uhd_enable_upstream_resume_interrupt() (UOTGHS->UOTGHS_HSTIER = UOTGHS_HSTIER_RXRSMIES)
|
||||
#define uhd_disable_upstream_resume_interrupt() (UOTGHS->UOTGHS_HSTIDR = UOTGHS_HSTIDR_RXRSMIEC)
|
||||
#define Is_uhd_upstream_resume_interrupt_enabled() (Tst_bits(UOTGHS->UOTGHS_HSTIMR, UOTGHS_HSTIMR_RXRSMIE))
|
||||
#define uhd_ack_upstream_resume() (UOTGHS->UOTGHS_HSTICR = UOTGHS_HSTICR_RXRSMIC)
|
||||
#define Is_uhd_upstream_resume() (Tst_bits(UOTGHS->UOTGHS_HSTISR, UOTGHS_HSTISR_RXRSMI))
|
||||
//! @}
|
||||
//! @}
|
||||
|
||||
|
||||
//! @name Pipes management
|
||||
//! @{
|
||||
|
||||
//! USB address of pipes
|
||||
//! @{
|
||||
#define uhd_configure_address(p, addr) \
|
||||
(Wr_bitfield((&UOTGHS->UOTGHS_HSTADDR1)[(p)>>2], \
|
||||
UOTGHS_HSTADDR1_HSTADDRP0_Msk << (((p)&0x03)<<3), addr))
|
||||
#define uhd_get_configured_address(p) \
|
||||
(Rd_bitfield((&UOTGHS->UOTGHS_HSTADDR1)[(p)>>2], \
|
||||
UOTGHS_HSTADDR1_HSTADDRP0_Msk << (((p)&0x03)<<3)))
|
||||
//! @}
|
||||
|
||||
//! Pipe enable
|
||||
//! Enable, disable, reset, freeze
|
||||
//! @{
|
||||
#define uhd_enable_pipe(p) \
|
||||
(Set_bits(UOTGHS->UOTGHS_HSTPIP, UOTGHS_HSTPIP_PEN0 << (p)))
|
||||
#define uhd_disable_pipe(p) \
|
||||
(Clr_bits(UOTGHS->UOTGHS_HSTPIP, UOTGHS_HSTPIP_PEN0 << (p)))
|
||||
#define Is_uhd_pipe_enabled(p) \
|
||||
(Tst_bits(UOTGHS->UOTGHS_HSTPIP, UOTGHS_HSTPIP_PEN0 << (p)))
|
||||
#define uhd_reset_pipe(p) \
|
||||
(Set_bits(UOTGHS->UOTGHS_HSTPIP, UOTGHS_HSTPIP_PEN0 << (p))); \
|
||||
(Clr_bits(UOTGHS->UOTGHS_HSTPIP, UOTGHS_HSTPIP_PEN0 << (p)))
|
||||
#define Is_uhd_resetting_pipe(p) \
|
||||
(Tst_bits(UOTGHS->UOTGHS_HSTPIP, UOTGHS_HSTPIP_PEN0 << (p)))
|
||||
#define uhd_freeze_pipe(p) (UOTGHS->UOTGHS_HSTPIPIER[p] = UOTGHS_HSTPIPIER_PFREEZES)
|
||||
#define uhd_unfreeze_pipe(p) (UOTGHS->UOTGHS_HSTPIPIDR[p] = UOTGHS_HSTPIPIDR_PFREEZEC)
|
||||
#define Is_uhd_pipe_frozen(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPIMR[p], UOTGHS_HSTPIPIMR_PFREEZE))
|
||||
#define uhd_reset_data_toggle(p) (UOTGHS->UOTGHS_HSTPIPIER[p] = UOTGHS_HSTPIPIER_RSTDTS)
|
||||
#define Is_uhd_data_toggle_reset(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPIMR[p], UOTGHS_HSTPIPIMR_RSTDT))
|
||||
//! @}
|
||||
|
||||
//! Pipe configuration
|
||||
//! @{
|
||||
#define uhd_configure_pipe_int_req_freq(p,freq) (Wr_bitfield(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_INTFRQ_Msk, (freq)))
|
||||
#define uhd_get_pipe_int_req_freq(p) (Rd_bitfield(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_INTFRQ_Msk))
|
||||
#define uhd_configure_pipe_endpoint_number(p,ep) (Wr_bitfield(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_PEPNUM_Msk, (ep)))
|
||||
#define uhd_get_pipe_endpoint_address(p) \
|
||||
(uhd_is_pipe_in(p) ?\
|
||||
(uhd_get_pipe_endpoint_number(p) | USB_EP_DIR_IN) :\
|
||||
(uhd_get_pipe_endpoint_number(p) | USB_EP_DIR_OUT))
|
||||
#define uhd_get_pipe_endpoint_number(p) (Rd_bitfield(UOTGHS->UOTGHS_HSTPIPCFG[p], (UOTGHS_HSTPIPCFG_PEPNUM_Msk)))
|
||||
#define uhd_configure_pipe_type(p, type) (Wr_bitfield(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_PTYPE_Msk, type))
|
||||
#define uhd_get_pipe_type(p) (Rd_bits(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_PTYPE_Msk))
|
||||
#define uhd_enable_pipe_bank_autoswitch(p) (Set_bits(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_AUTOSW))
|
||||
#define uhd_disable_pipe_bank_autoswitch(p) (Clr_bits(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_AUTOSW))
|
||||
#define Is_uhd_pipe_bank_autoswitch_enabled(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_AUTOSW))
|
||||
#define uhd_configure_pipe_token(p, token) (Wr_bits(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_PTOKEN_Msk, token))
|
||||
#define uhd_get_pipe_token(p) (Rd_bits(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_PTOKEN_Msk))
|
||||
#define uhd_is_pipe_in(p) (UOTGHS_HSTPIPCFG_PTOKEN_IN==uhd_get_pipe_token(p))
|
||||
#define uhd_is_pipe_out(p) (UOTGHS_HSTPIPCFG_PTOKEN_OUT==uhd_get_pipe_token(p))
|
||||
//! Bounds given integer size to allowed range and rounds it up to the nearest
|
||||
//! available greater size, then applies register format of UOTGHS controller
|
||||
//! for pipe size bit-field.
|
||||
#define uhd_format_pipe_size(size) \
|
||||
(32 - clz(((uint32_t)min(max(size, 8), 1024) << 1) - 1) - 1 - 3)
|
||||
#define uhd_configure_pipe_size(p,size) \
|
||||
(Wr_bits(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_PSIZE_Msk, uhd_format_pipe_size(size)))
|
||||
#define uhd_get_pipe_size(p) (8<<((Rd_bits(UOTGHS->UOTGHS_HSTPIPCFG[p], (UOTGHS_HSTPIPCFG_PSIZE_Msk)))>> UOTGHS_HSTPIPCFG_PSIZE_Pos))
|
||||
#define uhd_configure_pipe_bank(p,bank) (Wr_bits(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_PBK_Msk, (bank)))
|
||||
#define uhd_get_pipe_bank(p) (Rd_bits(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_PBK_Msk))
|
||||
#define uhd_allocate_memory(p) (Set_bits(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_ALLOC))
|
||||
#define uhd_unallocate_memory(p) (Clr_bits(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_ALLOC))
|
||||
#define Is_uhd_memory_allocated(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_ALLOC))
|
||||
|
||||
//! Enable PING management only available in HS mode
|
||||
# define uhd_enable_ping(p) (Set_bits(UOTGHS->UOTGHS_HSTPIPCFG[p], UOTGHS_HSTPIPCFG_PINGEN))
|
||||
//#endif
|
||||
#define uhd_configure_pipe(p, freq, ep_num, type, token, size, bank, bank_switch) \
|
||||
(UOTGHS->UOTGHS_HSTPIPCFG[p] = \
|
||||
(bank)|\
|
||||
((uhd_format_pipe_size(size)<<UOTGHS_HSTPIPCFG_PSIZE_Pos)&UOTGHS_HSTPIPCFG_PSIZE_Msk)|\
|
||||
((token)&UOTGHS_HSTPIPCFG_PTOKEN_Msk)|\
|
||||
((type)&UOTGHS_HSTPIPCFG_PTYPE_Msk)|\
|
||||
(((ep_num)<<UOTGHS_HSTPIPCFG_PEPNUM_Pos)&UOTGHS_HSTPIPCFG_PEPNUM_Msk)|\
|
||||
bank_switch |\
|
||||
(((freq)<<UOTGHS_HSTPIPCFG_INTFRQ_Pos)&UOTGHS_HSTPIPCFG_INTFRQ_Msk))
|
||||
|
||||
#define Is_uhd_pipe_configured(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPISR[p], UOTGHS_HSTPIPISR_CFGOK))
|
||||
//! @}
|
||||
|
||||
//! Pipe main interrupts management
|
||||
//! @{
|
||||
#define uhd_enable_pipe_interrupt(p) (UOTGHS->UOTGHS_HSTIER = (UOTGHS_HSTIER_PEP_0 << (p)))
|
||||
#define uhd_disable_pipe_interrupt(p) (UOTGHS->UOTGHS_HSTIDR = (UOTGHS_HSTIDR_PEP_0 << (p)))
|
||||
#define Is_uhd_pipe_interrupt_enabled(p) (Tst_bits(UOTGHS->UOTGHS_HSTIMR, UOTGHS_HSTIMR_PEP_0 << (p)))
|
||||
#define Is_uhd_pipe_interrupt(p) (Tst_bits(UOTGHS->UOTGHS_HSTISR, UOTGHS_HSTISR_PEP_0 << (p)))
|
||||
//! returns the lowest pipe number generating a pipe interrupt or UOTGHS_EPT_NUM if none
|
||||
#define uhd_get_interrupt_pipe_number() \
|
||||
(ctz(((UOTGHS->UOTGHS_HSTISR >> 8) & (UOTGHS->UOTGHS_HSTIMR >> 8)) | (1 << UOTGHS_EPT_NUM)))
|
||||
//! @}
|
||||
|
||||
//! Pipe overflow and underflow for isochronous and interrupt endpoints
|
||||
//! @{
|
||||
#define uhd_enable_overflow_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIER[p] = UOTGHS_HSTPIPIER_OVERFIES)
|
||||
#define uhd_disable_overflow_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIDR[p] = UOTGHS_HSTPIPIDR_OVERFIEC)
|
||||
#define Is_uhd_overflow_interrupt_enabled(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPIMR[p], UOTGHS_HSTPIPIMR_OVERFIE))
|
||||
#define uhd_ack_overflow_interrupt(p) (UOTGHS->UOTGHS_HSTPIPICR[p] = UOTGHS_HSTPIPICR_OVERFIC)
|
||||
#define Is_uhd_overflow(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPISR[p], UOTGHS_HSTPIPISR_OVERFI))
|
||||
|
||||
#define uhd_enable_underflow_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIER[p] = UOTGHS_HSTPIPIER_UNDERFIES)
|
||||
#define uhd_disable_underflow_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIDR[p] = UOTGHS_HSTPIPIDR_UNDERFIEC)
|
||||
#define Is_uhd_underflow_interrupt_enabled(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPIMR[p], UOTGHS_HSTPIPIMR_UNDERFIE))
|
||||
#define uhd_ack_underflow_interrupt(p) (UOTGHS->UOTGHS_HSTPIPICR[p] = UOTGHS_HSTPIPICR_UNDERFIC)
|
||||
#define Is_uhd_underflow(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPISR[p], UOTGHS_HSTPIPISR_UNDERFI))
|
||||
//! @}
|
||||
|
||||
//! USB packet errors management
|
||||
//! @{
|
||||
#define uhd_enable_stall_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIER[p] = UOTGHS_HSTPIPIER_RXSTALLDES)
|
||||
#define uhd_disable_stall_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIDR[p] = UOTGHS_HSTPIPIDR_RXSTALLDEC)
|
||||
#define Is_uhd_stall_interrupt_enabled(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPIMR[p], UOTGHS_HSTPIPIMR_RXSTALLDE))
|
||||
#define uhd_ack_stall(p) (UOTGHS->UOTGHS_HSTPIPICR[p] = UOTGHS_HSTPIPICR_RXSTALLDIC)
|
||||
#define Is_uhd_stall(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPISR[p], UOTGHS_HSTPIPISR_RXSTALLDI))
|
||||
|
||||
#define uhd_enable_pipe_error_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIER[p] = UOTGHS_HSTPIPIER_PERRES)
|
||||
#define uhd_disable_pipe_error_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIDR[p] = UOTGHS_HSTPIPIDR_PERREC)
|
||||
#define Is_uhd_pipe_error_interrupt_enabled(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPIMR[p], UOTGHS_HSTPIPIMR_PERRE))
|
||||
#define uhd_ack_all_errors(p) (UOTGHS->UOTGHS_HSTPIPERR[p] = 0UL)
|
||||
#define Is_uhd_pipe_error(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPISR[p], UOTGHS_HSTPIPISR_PERRI))
|
||||
#define uhd_error_status(p) (UOTGHS->UOTGHS_HSTPIPERR[p])
|
||||
#define Is_uhd_bad_data_toggle(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPERR[p], UOTGHS_HSTPIPERR_DATATGL))
|
||||
#define Is_uhd_data_pid_error(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPERR[p], UOTGHS_HSTPIPERR_DATAPID))
|
||||
#define Is_uhd_pid_error(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPERR[p], UOTGHS_HSTPIPERR_PID))
|
||||
#define Is_uhd_timeout_error(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPERR[p], UOTGHS_HSTPIPERR_TIMEOUT))
|
||||
#define Is_uhd_crc16_error(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPERR[p], UOTGHS_HSTPIPERR_CRC16))
|
||||
#define uhd_get_error_counter(p) (Rd_bits(UOTGHS->UOTGHS_HSTPIPERR[p], UOTGHS_HSTPIPERR_COUNTER))
|
||||
//! @}
|
||||
|
||||
//! Pipe data management
|
||||
//! @{
|
||||
#define uhd_data_toggle(p) (Rd_bits(UOTGHS->UOTGHS_HSTPIPISR[p], UOTGHS_HSTPIPISR_DTSEQ))
|
||||
|
||||
#define uhd_enable_bank_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIER[p] = UOTGHS_HSTPIPIER_NBUSYBKES)
|
||||
#define uhd_disable_bank_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIDR[p] = UOTGHS_HSTPIPIDR_NBUSYBKEC)
|
||||
#define Is_uhd_bank_interrupt_enabled(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPIMR[p], UOTGHS_HSTPIPIMR_NBUSYBKE))
|
||||
#define uhd_nb_busy_bank(p) (Rd_bits(UOTGHS->UOTGHS_HSTPIPISR[p], UOTGHS_HSTPIPISR_NBUSYBK_Msk))
|
||||
#define uhd_current_bank(p) (Rd_bits(UOTGHS->UOTGHS_HSTPIPISR[p], UOTGHS_HSTPIPISR_CURRBK_Msk ))
|
||||
|
||||
#define uhd_enable_short_packet_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIER[p] = UOTGHS_HSTPIPIER_SHORTPACKETES)
|
||||
#define uhd_disable_short_packet_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIDR[p] = UOTGHS_HSTPIPIDR_SHORTPACKETIEC)
|
||||
#define Is_uhd_short_packet_interrupt_enabled(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPIMR[p], UOTGHS_HSTPIPIMR_SHORTPACKETIE)) )
|
||||
#define uhd_ack_short_packet(p) (UOTGHS->UOTGHS_HSTPIPICR[p] = UOTGHS_HSTPIPICR_SHORTPACKETIC)
|
||||
#define Is_uhd_short_packet(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPISR[p], UOTGHS_HSTPIPISR_SHORTPACKETI))
|
||||
#define uhd_byte_count(p) (Rd_bitfield(UOTGHS->UOTGHS_HSTPIPISR[p], UOTGHS_HSTPIPISR_PBYCT_Msk))
|
||||
|
||||
#define Is_uhd_fifocon(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPIMR[p], UOTGHS_HSTPIPIMR_FIFOCON))
|
||||
#define uhd_ack_fifocon(p) (UOTGHS->UOTGHS_HSTPIPIDR[p] = UOTGHS_HSTPIPIDR_FIFOCONC)
|
||||
|
||||
#define uhd_enable_setup_ready_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIER[p] = UOTGHS_HSTPIPIER_TXSTPES)
|
||||
#define uhd_disable_setup_ready_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIDR[p] = UOTGHS_HSTPIPIDR_TXSTPEC)
|
||||
#define Is_uhd_setup_ready_interrupt_enabled(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPIMR[p], UOTGHS_HSTPIPIMR_TXSTPE))
|
||||
#define uhd_ack_setup_ready(p) (UOTGHS->UOTGHS_HSTPIPICR[p] = UOTGHS_HSTPIPICR_TXSTPIC)
|
||||
#define Is_uhd_setup_ready(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPISR[p], UOTGHS_HSTPIPISR_TXSTPI))
|
||||
|
||||
#define uhd_enable_in_received_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIER[p] = UOTGHS_HSTPIPIER_RXINES)
|
||||
#define uhd_disable_in_received_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIDR[p] = UOTGHS_HSTPIPIDR_RXINEC)
|
||||
#define Is_uhd_in_received_interrupt_enabled(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPIMR[p], UOTGHS_HSTPIPIMR_RXINE))
|
||||
#define uhd_ack_in_received(p) (UOTGHS->UOTGHS_HSTPIPICR[p] = UOTGHS_HSTPIPICR_RXINIC)
|
||||
#define Is_uhd_in_received(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPISR[p], UOTGHS_HSTPIPISR_RXINI))
|
||||
|
||||
#define uhd_enable_out_ready_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIER[p] = UOTGHS_HSTPIPIER_TXOUTES)
|
||||
#define uhd_disable_out_ready_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIDR[p] = UOTGHS_HSTPIPIDR_TXOUTEC)
|
||||
#define Is_uhd_out_ready_interrupt_enabled(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPIMR[p], UOTGHS_HSTPIPIMR_TXOUTE))
|
||||
#define uhd_ack_out_ready(p) (UOTGHS->UOTGHS_HSTPIPICR[p] = UOTGHS_HSTPIPICR_TXOUTIC)
|
||||
#define Is_uhd_out_ready(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPISR[p], UOTGHS_HSTPIPISR_TXOUTI))
|
||||
#define uhd_raise_out_ready(p) (UOTGHS->UOTGHS_HSTPIPIFR[p] = UOTGHS_HSTPIPIFR_TXOUTIS)
|
||||
|
||||
#define uhd_enable_nak_received_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIER[p] = UOTGHS_HSTPIPIER_NAKEDES)
|
||||
#define uhd_disable_nak_received_interrupt(p) (UOTGHS->UOTGHS_HSTPIPIDR[p] = UOTGHS_HSTPIPIDR_NAKEDEC)
|
||||
#define Is_uhd_nak_received_interrupt_enabled(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPIMR[p], UOTGHS_HSTPIPIMR_NAKEDE))
|
||||
#define uhd_ack_nak_received(p) (UOTGHS->UOTGHS_HSTPIPICR[p] = UOTGHS_HSTPIPICR_NAKEDIC)
|
||||
#define Is_uhd_nak_received(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPISR[p], UOTGHS_HSTPIPISR_NAKEDI))
|
||||
|
||||
#define Is_uhd_read_enabled(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPISR[p], UOTGHS_HSTPIPISR_RWALL))
|
||||
#define Is_uhd_write_enabled(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPISR[p], UOTGHS_HSTPIPISR_RWALL ))
|
||||
|
||||
#define uhd_enable_continuous_in_mode(p) (Set_bits(UOTGHS->UOTGHS_HSTPIPINRQ[p], UOTGHS_HSTPIPINRQ_INMODE))
|
||||
#define uhd_disable_continuous_in_mode(p) (Clr_bits(UOTGHS->UOTGHS_HSTPIPINRQ[p], UOTGHS_HSTPIPINRQ_INMODE))
|
||||
#define Is_uhd_continuous_in_mode_enabled(p) (Tst_bits(UOTGHS->UOTGHS_HSTPIPINRQ[p], UOTGHS_HSTPIPINRQ_INMODE))
|
||||
|
||||
#define uhd_in_request_number(p, in_num) (Set_bits(UOTGHS->UOTGHS_HSTPIPINRQ[p], (in_num)-1))
|
||||
#define uhd_get_in_request_number(p) (((Rd_bits(UOTGHS->UOTGHS_HSTPIPINRQ[p], UOTGHS_HSTPIPINRQ_INRQ_Msk))>>UOTGHS_HSTPIPINRQ_INRQ_Pos)+1)
|
||||
//! @}
|
||||
|
||||
//! Maximum transfer size on USB DMA
|
||||
#define UHD_PIPE_MAX_TRANS 0x8000
|
||||
|
||||
//! Get 64-, 32-, 16- or 8-bit access to FIFO data register of selected pipe.
|
||||
//! @param p Target Pipe number
|
||||
//! @param scale Data scale in bits: 64, 32, 16 or 8
|
||||
//! @return Volatile 64-, 32-, 16- or 8-bit data pointer to FIFO data register
|
||||
//! @warning It is up to the user of this macro to make sure that all accesses
|
||||
//! are aligned with their natural boundaries except 64-bit accesses which
|
||||
//! require only 32-bit alignment.
|
||||
//! @warning It is up to the user of this macro to make sure that used HSB
|
||||
//! addresses are identical to the DPRAM internal pointer modulo 32 bits.
|
||||
#define uhd_get_pipe_fifo_access(p, scale) \
|
||||
(((volatile TPASTE2(U, scale) (*)[UHD_PIPE_MAX_TRANS / ((scale) / 8)])UOTGHS_RAM_ADDR)[(p)])
|
||||
|
||||
#endif /* UOTGHS_HOST_H_INCLUDED */
|
||||
133
digistump-sam/system/libsam/include/usart.h
Normal file
133
digistump-sam/system/libsam/include/usart.h
Normal file
@@ -0,0 +1,133 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* \par Purpose
|
||||
*
|
||||
* This module provides several definitions and methods for using an USART
|
||||
* peripheral.
|
||||
*
|
||||
* \par Usage
|
||||
*
|
||||
* -# Enable the USART peripheral clock in the PMC.
|
||||
* -# Enable the required USART PIOs (see pio.h).
|
||||
* -# Configure the UART by calling USART_Configure.
|
||||
* -# Enable the transmitter and/or the receiver of the USART using
|
||||
* USART_SetTransmitterEnabled and USART_SetReceiverEnabled.
|
||||
* -# Send data through the USART using the USART_Write and
|
||||
* USART_WriteBuffer methods.
|
||||
* -# Receive data from the USART using the USART_Read and
|
||||
* USART_ReadBuffer functions; the availability of data can be polled
|
||||
* with USART_IsDataAvailable.
|
||||
* -# Disable the transmitter and/or the receiver of the USART with
|
||||
* USART_SetTransmitterEnabled and USART_SetReceiverEnabled.
|
||||
*/
|
||||
|
||||
#ifndef _USART_
|
||||
#define _USART_
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Headers
|
||||
*------------------------------------------------------------------------------*/
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Definitions
|
||||
*------------------------------------------------------------------------------*/
|
||||
|
||||
/** \section USART_mode USART modes
|
||||
* This section lists several common operating modes for an USART peripheral.
|
||||
*
|
||||
* \b Modes
|
||||
* - USART_MODE_ASYNCHRONOUS
|
||||
* - USART_MODE_IRDA
|
||||
*/
|
||||
|
||||
/** Basic asynchronous mode, i.e. 8 bits no parity.*/
|
||||
#define USART_MODE_ASYNCHRONOUS (US_MR_CHRL_8_BIT | US_MR_PAR_NO)
|
||||
|
||||
/** IRDA mode*/
|
||||
#define USART_MODE_IRDA (AT91C_US_USMODE_IRDA | AT91C_US_CHRL_8_BITS | AT91C_US_PAR_NONE | AT91C_US_FILTER)
|
||||
|
||||
/** SPI mode*/
|
||||
#define AT91C_US_USMODE_SPIM 0xE
|
||||
#define US_SPI_CPOL_0 (0x0<<16)
|
||||
#define US_SPI_CPHA_0 (0x0<<8)
|
||||
#define US_SPI_CPOL_1 (0x1<<16)
|
||||
#define US_SPI_CPHA_1 (0x1<<8)
|
||||
#define US_SPI_BPMODE_0 (US_SPI_CPOL_0|US_SPI_CPHA_1)
|
||||
#define US_SPI_BPMODE_1 (US_SPI_CPOL_0|US_SPI_CPHA_0)
|
||||
#define US_SPI_BPMODE_2 (US_SPI_CPOL_1|US_SPI_CPHA_1)
|
||||
#define US_SPI_BPMODE_3 (US_SPI_CPOL_1|US_SPI_CPHA_0)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*------------------------------------------------------------------------------*/
|
||||
/* Exported functions */
|
||||
/*------------------------------------------------------------------------------*/
|
||||
|
||||
extern void USART_Configure( Usart *usart, uint32_t mode, uint32_t baudrate, uint32_t masterClock ) ;
|
||||
extern uint32_t USART_GetStatus( Usart *usart ) ;
|
||||
extern void USART_EnableIt( Usart *usart,uint32_t mode ) ;
|
||||
extern void USART_DisableIt( Usart *usart,uint32_t mode ) ;
|
||||
extern void USART_SetTransmitterEnabled( Usart *usart, uint8_t enabled ) ;
|
||||
|
||||
extern void USART_SetReceiverEnabled( Usart *usart, uint8_t enabled ) ;
|
||||
|
||||
extern void USART_Write( Usart *usart, uint16_t data, volatile uint32_t timeOut ) ;
|
||||
|
||||
extern uint8_t USART_WriteBuffer( Usart *usart, void *buffer, uint32_t size ) ;
|
||||
|
||||
extern uint16_t USART_Read( Usart *usart, volatile uint32_t timeOut ) ;
|
||||
|
||||
extern uint8_t USART_ReadBuffer( Usart *usart, void *buffer, uint32_t size ) ;
|
||||
|
||||
extern uint8_t USART_IsDataAvailable( Usart *usart ) ;
|
||||
|
||||
extern void USART_SetIrdaFilter(Usart *pUsart, uint8_t filter);
|
||||
|
||||
extern void USART_PutChar( Usart *usart, uint8_t c ) ;
|
||||
|
||||
extern uint32_t USART_IsRxReady( Usart *usart ) ;
|
||||
|
||||
extern uint8_t USART_GetChar( Usart *usart ) ;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* #ifndef _USART_ */
|
||||
|
||||
74
digistump-sam/system/libsam/include/wdt.h
Normal file
74
digistump-sam/system/libsam/include/wdt.h
Normal file
@@ -0,0 +1,74 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* SAM Software Package License
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2011-2012, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following condition is met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* \section Purpose
|
||||
* Interface for Watchdog Timer (WDT) controller.
|
||||
*
|
||||
* \section Usage
|
||||
* -# Enable watchdog with given mode using \ref WDT_Enable().
|
||||
* -# Disable watchdog using \ref WDT_Disable()
|
||||
* -# Restart the watchdog using \ref WDT_Restart().
|
||||
* -# Get watchdog status using \ref WDT_GetStatus().
|
||||
* -# Caculate watchdog period value using \ref WDT_GetPeriod().
|
||||
*/
|
||||
|
||||
#ifndef _WDT_
|
||||
#define _WDT_
|
||||
|
||||
#include "../chip.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Exported functions
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
extern void WDT_Enable( Wdt* pWDT, uint32_t dwMode ) ;
|
||||
|
||||
extern void WDT_Disable( Wdt* pWDT ) ;
|
||||
|
||||
extern void WDT_Restart( Wdt* pWDT ) ;
|
||||
|
||||
extern uint32_t WDT_GetStatus( Wdt* pWDT ) ;
|
||||
|
||||
extern uint32_t WDT_GetPeriod( uint32_t dwMs ) ;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* #ifndef _WDT_ */
|
||||
|
||||
Reference in New Issue
Block a user