Interference of I2C to UART and GPIO LPC824

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Interference of I2C to UART and GPIO LPC824

662 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by Softface on Sun May 22 08:29:11 MST 2016
I made a program onLPC824 which use UART, SPI and different IO lines and I want to implement a drivers for I2C ADC converter.
When I use I2C (from periph_i2cm_interrup) alone I can address my ADC without any trouble but when in insert this piece of code in my program all other functionalities failed (UART,SPI, IO).
After many tries I find that the problem come from the function Chip_SWM_EnableFixedPin
static void Init_I2C_PinMux(void)
{
Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);

Chip_SWM_IsEnabled(SWM_FIXED_I2C0_SDA);// Ligne X
Chip_SWM_IsEnabled(SWM_FIXED_I2C0_SCL);// Ligne Y

Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);
}

The worse is that after launching this init function it is no longer possible to recovery a proper functioning of (UART,SPI, IO).even if I launched again their initialization phase or disable the I2C fixed pin.
I have to suppress the Init_I2C_PinMux () and restart my program from LPCXpresso interface. After every port communication are restored.
Another strange affair I tried this the following piece of code. I can’t understand why the function do not return the expected result. Of course I tried to to enable and disable the periph CLOCK ibetween each tried with the same the same. At this stage my conclusion is that as soon as you use Chip_SWM_EnableFixedPin(SWM_FIXED_I2C0_SDA); it become impossible to use another IO port. But I’m sure this conclusion is wrong. Anyone else have had this problem?
static void Init_I2C_PinMux(void)
{
uint32_ttmp=0;
/* Enable the clock to the Switch Matrix */
Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);

tmp = Chip_SWM_IsEnabled(SWM_FIXED_I2C0_SDA); // OK tmp = 0
tmp = Chip_SWM_IsEnabled(SWM_FIXED_I2C0_SCL); // OK tmp = 0

Chip_SWM_EnableFixedPin(SWM_FIXED_I2C0_SDA);
Chip_SWM_EnableFixedPin(SWM_FIXED_I2C0_SCL);

tmp = Chip_SWM_IsEnabled(SWM_FIXED_I2C0_SDA); // OK tmp = 1
tmp = Chip_SWM_IsEnabled(SWM_FIXED_I2C0_SCL); // OK tmp = 1

Chip_SWM_DisableFixedPin(SWM_FIXED_I2C0_SDA);
Chip_SWM_DisableFixedPin(SWM_FIXED_I2C0_SCL);

tmp = Chip_SWM_IsEnabled(SWM_FIXED_I2C0_SDA); // NOK tmp = 1 ?????
tmp = Chip_SWM_IsEnabled(SWM_FIXED_I2C0_SCL); // OK tmp = 0
Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);

}
I use LPCXpresso v8.0.0 [Build 526] [2015-11-23]
Labels (1)
0 Kudos
2 Replies

439 Views
lpcware
NXP Employee
NXP Employee
bump
0 Kudos

439 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by Softface on Tue May 24 09:03:05 MST 2016
Problem solved after 2 days of intensive investigation!
The problem redlib 'no host' instead of 'semi-host' grrr...

0 Kudos