mirror of
https://github.com/caperren/school_archives.git
synced 2025-11-09 21:51:15 +00:00
Added old firmware and pcb design files
These are all design documents that I thought I had lost. It's may make me cringe, but it's still cool to use it to see how far I've come.
This commit is contained in:
@@ -0,0 +1,423 @@
|
||||
/* This file has been prepared for Doxygen automatic documentation generation.*/
|
||||
/*! \file *********************************************************************
|
||||
*
|
||||
* \brief XMEGA Timer/Counter driver header file.
|
||||
*
|
||||
* This file contains the function prototypes and enumerator definitions
|
||||
* for various configuration parameters for the XMEGA Timer/Counter driver.
|
||||
*
|
||||
* The driver is not intended for size and/or speed critical code, since
|
||||
* most functions are just a few lines of code, and the function call
|
||||
* overhead would decrease code performance. The driver is intended for
|
||||
* rapid prototyping and documentation purposes for getting started with
|
||||
* the XMEGA Timer/Counter module.
|
||||
*
|
||||
* For size and/or speed critical code, it is recommended to copy the
|
||||
* function contents directly into your application instead of making
|
||||
* a function call.
|
||||
*
|
||||
* \par Application note:
|
||||
* AVR1306: Using the XMEGA Timer/Counter
|
||||
*
|
||||
* \par Documentation
|
||||
* For comprehensive code documentation, supported compilers, compiler
|
||||
* settings and supported devices see readme.html
|
||||
*
|
||||
* \author
|
||||
* Atmel Corporation: http://www.atmel.com \n
|
||||
* Support email: avr@atmel.com
|
||||
*
|
||||
* $Revision: 1569 $
|
||||
* $Date: 2008-04-22 13:03:43 +0200 (ti, 22 apr 2008) $ \n
|
||||
*
|
||||
* Copyright (c) 2008, Atmel Corporation All rights reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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.
|
||||
*****************************************************************************/
|
||||
#ifndef TC_DRIVER_H
|
||||
#define TC_DRIVER_H
|
||||
|
||||
#include "avr_compiler.h"
|
||||
|
||||
/* Definition of macros. */
|
||||
|
||||
/*! \brief Enables the event delay for this TC.
|
||||
*
|
||||
* This macro enables a one clock cycle delay of event sources for this TC.
|
||||
* Mainly used for the high word TC when two TCs are cascaded to form a 32-bit
|
||||
* TC.
|
||||
*
|
||||
* \param _tc The Timer/Counter to enable delay on.
|
||||
*/
|
||||
#define TC_EnableEventDelay( _tc ) ( (_tc)->CTRLD |= TC0_EVDLY_bm )
|
||||
|
||||
/*! \brief This macro disables the event delay for this TC.
|
||||
*
|
||||
* \param _tc The Timer/Counter to disable delay on.
|
||||
*/
|
||||
#define TC_DisableEventDelay( _tc ) ( (_tc)->CTRLD &= ~TC0_EVDLY_bm )
|
||||
|
||||
/*! \brief Locks automatic updating of compare and period registers.
|
||||
*
|
||||
* This macro will lock automatic updates of compare registers from the
|
||||
* corresponding buffer registers. To enable automatic updates again, use the
|
||||
* \ref TC_UnlockCompareUpdate macro.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
*/
|
||||
#define TC_LockCompareUpdate( _tc ) ( (_tc)->CTRLFSET = TC0_LUPD_bm )
|
||||
|
||||
/*! \brief Unlocks automatic updating of compare and period registers.
|
||||
*
|
||||
* This macro will unlock automatic updates of compare registers from the
|
||||
* corresponding buffer registers. Note that the output compare registers will
|
||||
* not be updated until an update event occurs, e.g. that the counter hits
|
||||
* TOP or BOTTOM. To force an update of the compare register from the buffer
|
||||
* register, use the \ref TC_ForceUpdate macro.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
*/
|
||||
#define TC_UnlockCompareUpdate( _tc ) ( (_tc)->CTRLFCLR = TC0_LUPD_bm )
|
||||
|
||||
|
||||
/*! \brief Force an update of the output compare and period registers.
|
||||
*
|
||||
* This macro will trigger a transfer from the output compare and period
|
||||
* buffer registers ( CCxBUF and PERBUF ) to the output compare and period
|
||||
* registers ( CCx and PER ). Calling this macro has the same effect as an
|
||||
* update condition.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
*/
|
||||
#define TC_ForceUpdate( _tc ) ( (_tc)->CTRLFSET = TC_CMD_UPDATE_gc )
|
||||
|
||||
/*! \brief Restart the Timer/Counter.
|
||||
*
|
||||
* This macro will restart the timer. The effect of running this command is:
|
||||
* - The CNT[H:L] register is cleared.
|
||||
* - The direction (DIR ) is reset. (Next clock cycle will increase the counter )
|
||||
* - All compare outputs are set to 0.
|
||||
* - If a DTI module is connected to the timer, it will be reset as well.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
*/
|
||||
#define TC_Restart( _tc ) ( (_tc)->CTRLFSET = TC_CMD_RESTART_gc )
|
||||
|
||||
/*! \brief Manually set the count.
|
||||
*
|
||||
* This macro writes a new value to the CNT[H:L] register.
|
||||
* Note that the CNT[H:L] register is not double buffered, so it is recommended
|
||||
* that the timer is not running when this macro is used.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
* \param _count New count value.
|
||||
*/
|
||||
#define TC_SetCount( _tc, _count ) ( (_tc)->CNT = (_count) )
|
||||
|
||||
/*! \brief Sets the timer period.
|
||||
*
|
||||
* This macro sets a new timer period. The period buffer register is not
|
||||
* used, so the new period will be valid immediately after the 16-bit write
|
||||
* is finished.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
* \param _period New Timer/Counter period.
|
||||
*/
|
||||
#define TC_SetPeriod( _tc, _period ) ( (_tc)->PER = (_period) )
|
||||
|
||||
/*! \brief Sets the timer period ( double buffered ).
|
||||
*
|
||||
* This macro sets a new timer period. The period buffer register is used,
|
||||
* so the new period will be valid after the next update condition.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
* \param _period New Timer/Counter period.
|
||||
*/
|
||||
#define TC_SetPeriodBuffered( _tc, _period ) ( (_tc)->PERBUF = (_period) )
|
||||
|
||||
/*! \brief Set new compare value for compare channel A. ( Double buffered )
|
||||
*
|
||||
* This macro sets a new compare value for compare channel A. The compare
|
||||
* channel A buffer register is used, so the new period will be valid from the
|
||||
* next update condition.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
* \param _compareValue New compare value for compare channel A.
|
||||
*/
|
||||
#define TC_SetCompareA( _tc, _compareValue ) ( (_tc)->CCABUF = (_compareValue) )
|
||||
|
||||
/*! \brief Set new compare value for compare channel B. ( Double buffered )
|
||||
*
|
||||
* This macro sets a new compare value for compare channel B. The compare
|
||||
* channel B buffer register is used, so the new period will be valid from the
|
||||
* next update condition.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
* \param _compareValue New compare value for compare channel B.
|
||||
*/
|
||||
#define TC_SetCompareB( _tc, _compareValue ) ( (_tc)->CCBBUF = (_compareValue) )
|
||||
|
||||
/*! \brief Set new compare value for compare channel C. ( Double buffered )
|
||||
*
|
||||
* This macro sets a new compare value for compare channel C. The compare
|
||||
* channel C buffer register is used, so the new period will be valid from the
|
||||
* next update condition.
|
||||
*
|
||||
* \note The CCC channel is not available on TCx1.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 module instance.
|
||||
* \param _compareValue New compare value for compare channel C.
|
||||
*/
|
||||
#define TC_SetCompareC( _tc, _compareValue ) ( (_tc)->CCCBUF = (_compareValue) )
|
||||
|
||||
/*! \brief Set new compare value for compare channel D. ( Double buffered )
|
||||
*
|
||||
* This macro sets a new compare value for compare channel D. The compare
|
||||
* channel D buffer register is used, so the new period will be valid from the
|
||||
* next update condition.
|
||||
*
|
||||
* \note The CCD channel is not available on TCx1.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 module instance.
|
||||
* \param _compareValue New compare value for compare channel D.
|
||||
*/
|
||||
#define TC_SetCompareD( _tc, _compareValue ) ( (_tc)->CCDBUF = (_compareValue) )
|
||||
|
||||
/*! \brief Test whether an overflow has occurred.
|
||||
*
|
||||
* The return value of this macro indicates if an overflow has occurred.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
*
|
||||
* \return Non-zero if overflow flag is set, zero otherwise.
|
||||
*/
|
||||
#define TC_GetOverflowFlag( _tc ) ( (_tc)->INTFLAGS & TC0_OVFIF_bm )
|
||||
|
||||
/*! \brief Clears the Timer/Counter overflow flag.
|
||||
*
|
||||
* This macro clears the Timer/Counter overflow flag.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
*/
|
||||
#define TC_ClearOverflowFlag( _tc ) ( (_tc)->INTFLAGS = TC0_OVFIF_bm )
|
||||
|
||||
/*! \brief Test whether an error has occurred.
|
||||
*
|
||||
* The return value of this macro indicates if an error has occurred.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
*
|
||||
* \return Non-zero if the Timer error flag is set.
|
||||
*/
|
||||
#define TC_GetErrorFlag( _tc ) ( (_tc)->INTFLAGS & TC0_ERRIF_bm )
|
||||
|
||||
/*! \brief Clears the Timer/Counter error flag.
|
||||
*
|
||||
* This macro clears the Timer/Counter error flag.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
*/
|
||||
#define TC_ClearErrorFlag( _tc ) ( (_tc)->INTFLAGS = TC0_ERRIF_bm )
|
||||
|
||||
/*! \brief Get the status for Compare or Capture channel A.
|
||||
*
|
||||
* When the TC is in Input Capture mode, the return value of this macro
|
||||
* indicates whether there is an unread input capture value available for
|
||||
* capture channel A.
|
||||
*
|
||||
* When the TC is in any other mode, the return value of this macro
|
||||
* indicates whether there has been a compare match between channel A and the
|
||||
* counter.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
*
|
||||
* \return Non-zero if Compare or capture has occured, zero otherwise.
|
||||
*/
|
||||
#define TC_GetCCAFlag( _tc ) ( (_tc)->INTFLAGS & TC0_CCAIF_bm )
|
||||
|
||||
/*! \brief Clears the Timer/Counter compare or capture A interrupt flag.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
*/
|
||||
#define TC_ClearCCAFlag( _tc ) ( (_tc)->INTFLAGS = TC0_CCAIF_bm )
|
||||
|
||||
/*! \brief Get the status for Compare or Capture channel B.
|
||||
*
|
||||
* When the TC is in Input Capture mode, the return value of this macro
|
||||
* indicates whether there is an unread input capture value available for
|
||||
* capture channel B.
|
||||
*
|
||||
* When the TC is in any other mode, the return value of this macro
|
||||
* indicates whether there has been a compare match between channel B and the
|
||||
* counter.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
*
|
||||
* \return Non-zero if Compare or capture has occured, zero otherwise.
|
||||
*/
|
||||
#define TC_GetCCBFlag( _tc ) ( (_tc)->INTFLAGS & TC0_CCBIF_bm )
|
||||
|
||||
/*! \brief Clears the Timer/Counter compare or capture B interrupt flag.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
*/
|
||||
#define TC_ClearCCBFlag( _tc ) ( (_tc)->INTFLAGS = TC0_CCBIF_bm )
|
||||
|
||||
/*! \brief Get the status for Compare or Capture channel C.
|
||||
*
|
||||
* When the TC is in Input Capture mode, the return value of this macro
|
||||
* indicates whether there is an unread input capture value available for
|
||||
* capture channel C.
|
||||
*
|
||||
* When the TC is in any other mode, the return value of this macro
|
||||
* indicates whether there has been a compare match between channel C and the
|
||||
* counter.
|
||||
*
|
||||
* \note The CCC channel is not available on TCx1.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 module instance.
|
||||
*
|
||||
* \return Non-zero if Compare or capture has occured, zero otherwise.
|
||||
*/
|
||||
#define TC_GetCCCFlag( _tc ) ( (_tc)->INTFLAGS & TC0_CCCIF_bm )
|
||||
|
||||
/*! \brief Clears the Timer/Counter compare or capture C interrupt flag.
|
||||
*
|
||||
* This macro clears the Timer/Counter compare or capture C interrupt flag.
|
||||
*
|
||||
* \note The CCC channel is not available on TCx1.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 module instance.
|
||||
*/
|
||||
#define TC_ClearCCCFlag( _tc ) ( (_tc)->INTFLAGS = TC0_CCCIF_bm )
|
||||
|
||||
/*! \brief Get the status for Compare or Capture channel D.
|
||||
*
|
||||
* When the TC is in Input Capture mode, the return value of this macro
|
||||
* indicates whether there is an unread input capture value available for
|
||||
* capture channel D.
|
||||
*
|
||||
* When the TC is in any other mode, the return value of this macro
|
||||
* indicates whether there has been a compare match between channel D and the
|
||||
* counter.
|
||||
*
|
||||
* \note The CCD channel is not available on TCx1.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 module instance.
|
||||
*
|
||||
* \return Non-zero if Compare or capture has occured, zero otherwise.
|
||||
*/
|
||||
#define TC_GetCCDFlag( _tc ) ( (_tc)->INTFLAGS & TC0_CCDIF_bm )
|
||||
|
||||
/*! \brief Clears the Timer/Counter compare or capture D interrupt flag.
|
||||
*
|
||||
* This macro clears the Timer/Counter compare or capture D interrupt flag.
|
||||
*
|
||||
* \note The CCD channel is not available on TCx1.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 module instance.
|
||||
*/
|
||||
#define TC_ClearCCDFlag( _tc ) ( (_tc)->INTFLAGS = TC0_CCDIF_bm )
|
||||
|
||||
|
||||
/*! \brief Reads the first available input capture value for channel A.
|
||||
*
|
||||
* This macro returns the first available input capture value for
|
||||
* capture channel A.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
*
|
||||
* \return The first available input capture value for channel A.
|
||||
*/
|
||||
#define TC_GetCaptureA( _tc ) ( (_tc)->CCA )
|
||||
|
||||
/*! \brief Reads the first available input capture value for channel B.
|
||||
*
|
||||
* This macro returns the first available input capture value for
|
||||
* capture channel B.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
*
|
||||
* \return The first available input capture value for channel B.
|
||||
*/
|
||||
#define TC_GetCaptureB( _tc ) ( (_tc)->CCB )
|
||||
|
||||
/*! \brief Reads the first available input capture value for channel C.
|
||||
*
|
||||
* This macro returns the first available input capture value for
|
||||
* capture channel C.
|
||||
*
|
||||
* \note The CCC channel is not available on TCx1.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 module instance.
|
||||
*
|
||||
* \return The first available input capture value for channel C.
|
||||
*/
|
||||
#define TC_GetCaptureC( _tc ) ( (_tc)->CCC )
|
||||
|
||||
/*! \brief Reads the first available input capture value for channel D.
|
||||
*
|
||||
* This macro returns the first available input capture value for
|
||||
* capture channel D.
|
||||
*
|
||||
* \note The CCD channel is not available on TCx1.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 module instance.
|
||||
*
|
||||
* \return The first available input capture value for channel D.
|
||||
*/
|
||||
#define TC_GetCaptureD( _tc ) ( (_tc)->CCD )
|
||||
|
||||
|
||||
/* Prototyping of functions. Documentation can be found in source file. */
|
||||
|
||||
void TC0_ConfigClockSource( volatile TC0_t * tc, TC_CLKSEL_t clockSelection );
|
||||
void TC0_ConfigWGM( volatile TC0_t * tc, TC_WGMODE_t wgm );
|
||||
void TC0_ConfigInputCapture( volatile TC0_t * tc, TC_EVSEL_t eventSource );
|
||||
void TC0_EnableCCChannels( volatile TC0_t * tc, uint8_t enableMask );
|
||||
void TC0_DisableCCChannels( volatile TC0_t * tc, uint8_t disableMask );
|
||||
void TC0_SetOverflowIntLevel( volatile TC0_t * tc, TC_OVFINTLVL_t intLevel );
|
||||
void TC0_SetErrorIntLevel( volatile TC0_t * tc, TC_ERRINTLVL_t intLevel );
|
||||
void TC0_SetCCAIntLevel( volatile TC0_t * tc, TC_CCAINTLVL_t intLevel );
|
||||
void TC0_SetCCBIntLevel( volatile TC0_t * tc, TC_CCBINTLVL_t intLevel );
|
||||
void TC0_SetCCCIntLevel( volatile TC0_t * tc, TC_CCCINTLVL_t intLevel );
|
||||
void TC0_SetCCDIntLevel( volatile TC0_t * tc, TC_CCDINTLVL_t intLevel );
|
||||
void TC0_Reset( volatile TC0_t * tc );
|
||||
|
||||
void TC1_ConfigClockSource( volatile TC1_t * tc, TC_CLKSEL_t clockSelection );
|
||||
void TC1_ConfigWGM( volatile TC1_t * tc, TC_WGMODE_t wgm );
|
||||
void TC1_ConfigInputCapture( volatile TC1_t * tc, TC_EVSEL_t eventSource );
|
||||
void TC1_EnableCCChannels( volatile TC1_t * tc, uint8_t enableMask );
|
||||
void TC1_DisableCCChannels( volatile TC1_t * tc, uint8_t disableMask );
|
||||
void TC1_SetOverflowIntLevel( volatile TC1_t * tc, TC_OVFINTLVL_t intLevel );
|
||||
void TC1_SetErrorIntLevel( volatile TC1_t * tc, TC_ERRINTLVL_t intLevel );
|
||||
void TC1_SetCCAIntLevel( volatile TC1_t * tc, TC_CCAINTLVL_t intLevel );
|
||||
void TC1_SetCCBIntLevel( volatile TC1_t * tc, TC_CCBINTLVL_t intLevel );
|
||||
void TC1_SetCCCIntLevel( volatile TC1_t * tc, TC_CCCINTLVL_t intLevel );
|
||||
void TC1_SetCCDIntLevel( volatile TC1_t * tc, TC_CCDINTLVL_t intLevel );
|
||||
void TC1_Reset( volatile TC1_t * tc );
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user