/*C************************************************************************** * NAME: clock.c *---------------------------------------------------------------------------- * Copyright (c) 2004 Atmel. *---------------------------------------------------------------------------- * RELEASE: snd1c-demo-df-mmc-3_4_4 * REVISION: 1.8 *---------------------------------------------------------------------------- * PURPOSE: * This file contains the clock routines * * NOTES: * Configuration: * - FOSC in config.h *****************************************************************************/ /*_____ I N C L U D E S ____________________________________________________*/ #include "config.h" /* system configuration */ #ifndef MACRO_MP3_NO_SUPPORT #include "include\mp3_drv.h" /* mp3 driver definition */ #endif #include "include\aud_drv.h" /* audio driver definition */ #include "include/dac_drv.h" /* dac driver definition */ #include "include/clock.h" /* clock definition */ /*_____ M A C R O S ________________________________________________________*/ /*_____ D E F I N I T I O N ________________________________________________*/ #if FOSC == 12000 /* Fpll= 12 * (R+1) / (N+1) */ const St_clock __code clock_div[8] = { 126, 14, 3, 11, _384Fs, /* Fs= 22.05 KHz, Fpll= 101.6 MHz, Fmp3= 25.4 MHz */ 191, 24, 3, 9, _384Fs, /* Fs= 24 KHz, Fpll= 92.16 MHz, Fmp3= 23.04 MHz */ 511, 74, 3, 19, _256Fs, /* Fs= 16 KHz, Fpll= 81.92 MHz, Fmp3= 20.48 MHz */ 191, 24, 0, 29, _384Fs, /* Fs= 8 KHz, Fpll= 92.16 MHz, voice only */ 126, 14, 3, 5, _384Fs, /* Fs= 44.1 KHz, Fpll= 101.6 MHz, Fmp3= 25.4 MHz */ 191, 24, 3, 4, _384Fs, /* Fs= 48 KHz, Fpll= 92.16 MHz, Fmp3= 23.04 MHz */ 511, 74, 3, 9, _256Fs, /* Fs= 32 KHz, Fpll= 81.92 MHz, Fmp3= 20.48 MHz */ 15, 1, 1, 0, 0 /* USB only, Fpll= 96 MHz */ }; #endif #if FOSC == 16000 /* Fpll= 16 * (R+1) / (N+1) */ const St_clock __code clock_div[8] = { 541, 95, 3, 15, _256Fs, /* Fs= 22.05 KHz, Fpll= 90.32 MHz, Fmp3= 22.58 MHz */ 143, 24, 3, 9, _384Fs, /* Fs= 24 KHz, Fpll= 92.16 MHz, Fmp3= 23.04 MHz */ 534, 94, 3, 21, _256Fs, /* Fs= 16 KHz, Fpll= 90.11 MHz, Fmp3= 22.53 MHz */ 143, 24, 0, 29, _384Fs, /* Fs= 8 KHz, Fpll= 92.16 MHz, voice only */ 541, 95, 3, 7, _256Fs, /* Fs= 44.1 KHz, Fpll= 90.32 MHz, Fmp3= 22.58 MHz */ 143, 24, 3, 4, _384Fs, /* Fs= 48 KHz, Fpll= 92.16 MHz, Fmp3= 23.04 MHz */ 534, 94, 3, 10, _256Fs, /* Fs= 32 KHz, Fpll= 90.11 MHz, Fmp3= 22.53 MHz */ 11, 1, 1, 0, 0 /* USB only, Fpll= 96 MHz */ }; #endif #if FOSC == 20000 /* Fpll= 20 * (R+1) / (N+1) */ const St_clock __code clock_div[8] = { 126, 24, 3, 11, _384Fs, /* Fs= 22.05 KHz, Fpll= 101.6 MHz, Fmp3= 25.4 MHz */ 575, 124, 3, 9, _384Fs, /* Fs= 24 KHz, Fpll= 92.16 MHz, Fmp3= 23.04 MHz */ 511, 124, 3, 19, _256Fs, /* Fs= 16 KHz, Fpll= 81.92 MHz, Fmp3= 20.48 MHz */ 575, 124, 0, 29, _384Fs, /* Fs= 8 KHz, Fpll= 92.16 MHz, voice only */ 126, 24, 3, 5, _384Fs, /* Fs= 44.1 KHz, Fpll= 101.6 MHz, Fmp3= 25.4 MHz */ 575, 124, 3, 4, _384Fs, /* Fs= 48 KHz, Fpll= 92.16 MHz, Fmp3= 23.04 MHz */ 511, 124, 3, 9, _256Fs, /* Fs= 32 KHz, Fpll= 81.92 MHz, Fmp3= 20.48 MHz */ 23, 4, 1, 0, 0 /* USB only, Fpll= 96 MHz */ }; #endif /*_____ D E C L A R A T I O N ______________________________________________*/ #ifndef MACRO_MP3_NO_SUPPORT /*F************************************************************************** * NAME: clock_song_init *---------------------------------------------------------------------------- * PARAMS: * freq: 0 -> 22.05 KHz * 1 -> 24 KHz * 2 -> 16 KHz * 3 -> unused * 4 -> 44.1 KHz * 5 -> 48 KHz * 6 -> 32 KHz * 7 -> unused * * return: *---------------------------------------------------------------------------- * PURPOSE: * Song clock initialization *---------------------------------------------------------------------------- * EXAMPLE: *---------------------------------------------------------------------------- * NOTE: * freq is an index in the table giving the divider values *---------------------------------------------------------------------------- * REQUIREMENTS: *****************************************************************************/ void clock_song_init (Byte freq) { Pll_set_ndiv(clock_div[freq].n_div); Pll_set_rdiv(clock_div[freq].r_div); Pll_enable(); Mp3_set_clock(clock_div[freq].mp3_div); Aud_set_clock(clock_div[freq].aud_div); Dac_overclock((clock_div[freq].dac_over)); Aud_set_oversamp(clock_div[freq].dac_over); /* init HLR bit */ } #endif /*F************************************************************************** * NAME: clock_voice_init *---------------------------------------------------------------------------- * PARAMS: * * return: *---------------------------------------------------------------------------- * PURPOSE: * Voice clock initialization *---------------------------------------------------------------------------- * EXAMPLE: *---------------------------------------------------------------------------- * NOTE: *---------------------------------------------------------------------------- * REQUIREMENTS: *****************************************************************************/ void clock_voice_init (void) { Pll_set_ndiv(clock_div[VOC_FREQ].n_div); Pll_set_rdiv(clock_div[VOC_FREQ].r_div); Pll_enable(); Aud_set_clock(clock_div[VOC_FREQ].aud_div); Dac_overclock((clock_div[VOC_FREQ].dac_over)); Aud_set_oversamp(clock_div[VOC_FREQ].dac_over); /* init HLR bit */ } /*F************************************************************************** * NAME: clock_disable *---------------------------------------------------------------------------- * PARAMS: * * return: *---------------------------------------------------------------------------- * PURPOSE: * Clocks stop *---------------------------------------------------------------------------- * EXAMPLE: *---------------------------------------------------------------------------- * NOTE: *---------------------------------------------------------------------------- * REQUIREMENTS: *****************************************************************************/ void clock_disable (void) { Pll_stop(); #ifndef MACRO_MP3_NO_SUPPORT Mp3_set_clock(0); #endif Aud_set_clock(0); }