FreeCalypso > hg > fc-magnetite
view src/cs/drivers/drv_app/lcc/lcc_modulate.c @ 629:3231dd9b38c1
armio.c: make GPIOs 8 & 13 outputs driving 1 on all "classic" targets
Calypso GPIOs 8 & 13 are pinmuxed with MCUEN1 & MCUEN2, respectively,
and on powerup these pins are MCUEN, i.e., outputs driving 1. TI's code
for C-Sample and earlier turns them into GPIOs configured as outputs also
driving 1 - so far, so good - but TI's code for BOARD 41 (which covers
D-Sample, Leonardo and all real world Calypso devices derived from the
latter) switches them from MCUEN to GPIOs, but then leaves them as inputs.
Given that the hardware powerup state of these two pins is outputs driving 1,
every Calypso board design MUST be compatible with such driving; typically
these GPIO signals will be either unused and unconnected or connected as
outputs driving some peripheral. Turning these pins into GPIO inputs will
result in floating inputs on every reasonably-wired board, thus I am
convinced that this configuration is nothing but a bug on the part of
whoever wrote this code at TI.
This floating input bug had already been fixed earlier for GTA modem and
FCDEV3B targets; the present change makes the fix unconditional for all
"classic" targets. The newly affected targets are D-Sample, Leonardo,
Tango and GTM900.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 02 Jan 2020 05:38:26 +0000 |
parents | 945cf7f506b2 |
children |
line wrap: on
line source
/****************************************************************************** * Power Task (pwr) * Design and coding by Svend Kristian Lindholm, skl@ti.com * * PWR SW Modulation * * $Id: pwr_modulate.c 1.1 Wed, 20 Aug 2003 10:22:37 +0200 skl $ * ******************************************************************************/ #include <string.h> #include "lcc/lcc.h" #include "lcc/lcc_trace.h" #include "lcc/lcc_modulate.h" #include "lcc/lcc_cfg_i.h" #include "lcc/lcc_cfg.h" #include "rv/rv_defined_swe.h" #include "abb/abb.h" /****************************************************************************** * Function prototypes ******************************************************************************/ void pwr_modulate_init(void); void pwr_modulate_on(void); void pwr_modulate_off(void); #if (USE_Q401_CHG_CIRCUIT == 1) extern T_PWR_CFG_BLOCK *pwr_cfg; #endif void pwr_modulate_init(void) { ttw(ttr(TTrEventLow,"pwr_modulate_init(%d)" NL, 0)); #if (USE_PWL_AS_MODULATOR == 1) BUZZ_LIGHT_REG |= 0x02; PWL_LEVEL_REG = 0xFF; // Full envelope function PWL_CTRL_REG = 0x00; // No 32KHz clock #else // Set GPIO 6 HIGH *((volatile uint16 *) 0xfffe4806) |= 0x0020; // Enable GPIO module *((volatile uint16 *) 0xfffe4804) &= 0xffbf; // Set GPIO-6 = output *((volatile uint16 *) 0xfffe4802) |= 0x0080; // Set GPIO-6 = HIGH #endif ttw(ttr(TTrEventLow,"pwr_modulate_init(%d)" NL, 0xff)); } void pwr_modulate_on(void) { ttw(ttr(TTrEventLow,"pwr_modulate_on(%d)" NL, 0)); #if (USE_Q401_CHG_CIRCUIT== 1) /* Program the DAC with the constant current value taken from /pwr/chg/chg<N>.cfg multiplied by k/255, where current k is in [1..255] */ ABB_Write_Register_on_page(PAGE0, CHGREG, (pwr_cfg->data.k * pwr_cfg->chg.ichg_max) / 255); #endif #if (USE_Q402_CHG_CIRCUIT == 1) #if (USE_PWL_AS_MODULATOR == 1) BUZZ_LIGHT_REG |= 0x02; PWL_LEVEL_REG = 0xFF; // Full envelope function PWL_CTRL_REG = 0x00; // No 32KHz clock #else // Use GPIO 6 *((volatile uint16 *) 0xfffe4806) |= 0x0020; // Enable GPIO module *((volatile uint16 *) 0xfffe4804) &= 0xffbf; // Set GPIO-6 = output *((volatile uint16 *) 0xfffe4802) |= 0x0080; // Set GPIO-6 = HIGH #endif #endif ttw(ttr(TTrEventLow,"pwr_modulate_on(%d)" NL, 0xFF)); } void pwr_modulate_off(void) { ttw(ttr(TTrEventLow,"pwr_modulate_off(%d)" NL, 0)); #if (USE_Q401_CHG_CIRCUIT == 1) // Don't do anything - FET is fully controlled in pwr_modulate_on() #endif #if (USE_Q402_CHG_CIRCUIT == 1) #ifdef USE_PWL_AS_MODULATOR BUZZ_LIGHT_REG &= 0xfd; PWL_LEVEL_REG = 0x00; // No envelope function PWL_CTRL_REG = 0x00; // No 32KHz clock #else // Use GPIO 6 *((volatile uint16 *) 0xfffe4806) |= 0x0020; // Enable GPIO module *((volatile uint16 *) 0xfffe4804) &= 0xffbf; // Set GPIO-6 = output *((volatile uint16 *) 0xfffe4802) &= 0x007f; // Set GPIO-6 = LOW #endif #endif ttw(ttr(TTrEventLow,"pwr_modulate_off(%d)" NL, 0xFF)); }