Tenía un poco de confusión con respecto a la dirección de GPIO_PortA Como se menciona en la hoja de datos:
- Dirección basada en GPIO PortA: 0x40004000
- y GIOP_DATA tiene Offset: 0x000
- que significa la dirección de GPIO_PortA = 0x40004000;
El problema comienza desde aquí:
- por qué este código no funciona como se esperaba: (usando direcciones de hoja de datos)
#define porta_data (*(volatile unsigned long*)0x40004000)
...
while(1)
{
porta_data=~porta_data
}
- y por qué este código funciona con una dirección incorrecta (se vio durante el lec en línea de edX)
#define porta_data (*(volatile unsigned long*)0x400043fc)
...
while(1)
{
porta_data=~porta_data
}
- hay otro problema.
- cuando uso el método de enlace de bits y uso la fórmula.
bit_word_addr = bit_band_base + (byte_offset * 32) + (bit_number * 4)
Como:
#define bit_word_addr (0x40004000+(0x0000*32)+(1*4+4))
#define porta_pin0 (*(volatile unsigned long*)bit_word_addr)
- usando la dirección base y el desplazamiento como se menciona en la hoja de datos
- Podría cambiar el bit individual como se esperaba.
- Pero al usar la misma dirección no pude cambiar todo el puerto (GPIO_PORTA).