/////////////////////////////////////////////////////////////////////////////// // / // IAR Atmel AVR C/C++ Compiler V4.30F/W32 12/Mar/2008 23:01:38 / // Copyright 1996-2007 IAR Systems. All rights reserved. / // / // Source file = C:\home\kevin\pub\src\bc100_cal\IAR\PWM.c / // Command line = C:\home\kevin\pub\src\bc100_cal\IAR\PWM.c / // --cpu=tiny861 -ms -o C:\home\kevin\pub\src\bc100_cal\IA / // R\Debug\Obj\ -lC C:\home\kevin\pub\src\bc100_cal\IAR\De / // bug\List\ -lB C:\home\kevin\pub\src\bc100_cal\IAR\Debug / // \List\ --initializers_in_flash -z2 --no_cse / // --no_inline --no_code_motion --no_cross_call / // --no_clustering --no_tbaa --debug / // -DENABLE_BIT_DEFINITIONS -e --require_prototypes -I / // "C:\Program Files\IAR Systems\Embedded Workbench / // 4.0\avr\INC\" -I "C:\Program Files\IAR / // Systems\Embedded Workbench 4.0\avr\INC\CLIB\" / // --eeprom_size 512 / // List file = C:\home\kevin\pub\src\bc100_cal\IAR\Debug\List\PWM.s90 / // / // / /////////////////////////////////////////////////////////////////////////////// NAME PWM RSEG CSTACK:DATA:NOROOT(0) RSEG RSTACK:DATA:NOROOT(0) PUBLIC PWM_DecrementDutyCycle PUBLIC PWM_IncrementDutyCycle PUBLIC PWM_Start PUBLIC PWM_Stop PUBWEAK _A_DDRB PUBWEAK _A_DT1 PUBWEAK _A_OCR1A PUBWEAK _A_OCR1B PUBWEAK _A_OCR1C PUBWEAK _A_OCR1D PUBWEAK _A_PLLCSR PUBWEAK _A_TCCR1A PUBWEAK _A_TCCR1B PUBWEAK _A_TCCR1C PUBWEAK _A_TCCR1D PUBWEAK _A_TCCR1E PUBWEAK __?EEARH PUBWEAK __?EEARL PUBWEAK __?EECR PUBWEAK __?EEDR EXTERN Time_Set EXTERN Time_Left // C:\home\kevin\pub\src\bc100_cal\IAR\PWM.c // 1 /* This file has been prepared for Doxygen automatic documentation generation.*/ // 2 /*! \file ********************************************************************* // 3 * // 4 * \brief // 5 * Functions for use of PWM // 6 * // 7 * Contains functions for initializing and controlling PWM output. // 8 * // 9 * \par Application note: // 10 * AVR458: Charging Li-Ion Batteries with BC100\n // 11 * AVR463: Charging NiMH Batteries with BC100 // 12 * // 13 * \par Documentation // 14 * For comprehensive code documentation, supported compilers, compiler // 15 * settings and supported devices see readme.html // 16 * // 17 * \author // 18 * Atmel Corporation: http://www.atmel.com \n // 19 * Support email: avr@atmel.com // 20 * // 21 * // 22 * $Name$ // 23 * $Revision: 2299 $ // 24 * $RCSfile$ // 25 * $URL: http://svn.norway.atmel.com/AppsAVR8/avr458_Charging_Li-Ion_Batteries_with_BC100/tag/20070904_release_1.0/code/IAR/PWM.c $ // 26 * $Date: 2007-08-23 12:55:51 +0200 (to, 23 aug 2007) $\n // 27 ******************************************************************************/ // 28 // 29 #include ASEGN ABSOLUTE:DATA:NOROOT,050H // volatile __io _A_TCCR1A _A_TCCR1A: DS 1 ASEGN ABSOLUTE:DATA:NOROOT,04fH // volatile __io _A_TCCR1B _A_TCCR1B: DS 1 ASEGN ABSOLUTE:DATA:NOROOT,04dH // volatile __io _A_OCR1A _A_OCR1A: DS 1 ASEGN ABSOLUTE:DATA:NOROOT,04cH // volatile __io _A_OCR1B _A_OCR1B: DS 1 ASEGN ABSOLUTE:DATA:NOROOT,04bH // volatile __io _A_OCR1C _A_OCR1C: DS 1 ASEGN ABSOLUTE:DATA:NOROOT,04aH // volatile __io _A_OCR1D _A_OCR1D: DS 1 ASEGN ABSOLUTE:DATA:NOROOT,049H // volatile __io _A_PLLCSR _A_PLLCSR: DS 1 ASEGN ABSOLUTE:DATA:NOROOT,047H // volatile __io _A_TCCR1C _A_TCCR1C: DS 1 ASEGN ABSOLUTE:DATA:NOROOT,046H // volatile __io _A_TCCR1D _A_TCCR1D: DS 1 ASEGN ABSOLUTE:DATA:NOROOT,044H // volatile __io _A_DT1 _A_DT1: DS 1 ASEGN ABSOLUTE:DATA:NOROOT,037H // volatile __io _A_DDRB _A_DDRB: DS 1 ASEGN ABSOLUTE:DATA:NOROOT,020H // volatile __io _A_TCCR1E _A_TCCR1E: DS 1 // 30 // 31 #include "enums.h" // 32 // 33 #include "main.h" // 34 #include "PWM.h" // 35 #include "time.h" // 36 // 37 // 38 //****************************************************************************** // 39 // Functions // 40 //****************************************************************************** // 41 /*! \brief Stops PWM output // 42 * // 43 */ RSEG CODE:CODE:NOROOT(1) // 44 void PWM_Stop(void) PWM_Stop: // 45 { // 46 OCR1B = 0; // Reset compare level. LDI R16, 0 OUT 0x2C, R16 // 47 PLLCSR = 0; // Disable PLL, switch to synchronous CLK mode. LDI R16, 0 OUT 0x29, R16 // 48 TCCR1A = 0; // Set normal port operation, disable PWM modes. LDI R16, 0 OUT 0x30, R16 // 49 TCCR1B = 0; // Stop timer/counter1. LDI R16, 0 OUT 0x2F, R16 // 50 TCCR1C = 0; // Set normal port operation. LDI R16, 0 OUT 0x27, R16 // 51 TCCR1D = 0; // No fault protection, normal waveform. LDI R16, 0 OUT 0x26, R16 // 52 OCR1C = 0; // Reset compare. LDI R16, 0 OUT 0x2B, R16 // 53 OCR1D = 0; // Reset compare. LDI R16, 0 OUT 0x2A, R16 // 54 DT1 = 0; // No dead time values. LDI R16, 0 OUT 0x24, R16 // 55 } RET REQUIRE _A_TCCR1A REQUIRE _A_TCCR1B REQUIRE _A_OCR1B REQUIRE _A_OCR1C REQUIRE _A_OCR1D REQUIRE _A_PLLCSR REQUIRE _A_TCCR1C REQUIRE _A_TCCR1D REQUIRE _A_DT1 // 56 // 57 // 58 /*! \brief Initializes and starts PWM output // 59 * // 60 * Initializes timer1 for use as a PWM with a clock rate of 64 MHz.\n // 61 * Its comparator is connected to PB3 and will output high until timer1 reaches // 62 * the value of OCR1B. It is then dropped to 0.\n // 63 * The comparator outputs high again when the counter overflows, which will // 64 * happen at a rate of 250 kHz. // 65 */ RSEG CODE:CODE:NOROOT(1) // 66 void PWM_Start(void) PWM_Start: // 67 { // 68 // Clear OC1B on compare match, enable PWM on comparator OCR1B. // 69 TCCR1A = (1< 0) { IN R16, 0x2C CPI R16, 1 BRCS ??PWM_DecrementDutyCycle_0 // 145 OCR1B -= 1; IN R16, 0x2C DEC R16 OUT 0x2C, R16 // 146 return(TRUE); LDI R16, 1 RET // 147 } else { // 148 return(FALSE); ??PWM_DecrementDutyCycle_0: LDI R16, 0 RET REQUIRE _A_OCR1B // 149 } // 150 } ASEGN ABSOLUTE:DATA:NOROOT,01cH __?EECR: ASEGN ABSOLUTE:DATA:NOROOT,01dH __?EEDR: ASEGN ABSOLUTE:DATA:NOROOT,01eH __?EEARL: ASEGN ABSOLUTE:DATA:NOROOT,01fH __?EEARH: END // // 12 bytes in segment ABSOLUTE // 168 bytes in segment CODE // // 168 bytes of CODE memory // 0 bytes of DATA memory (+ 12 bytes shared) // //Errors: none //Warnings: none