También quería cambiar el puerto en unidades de bits, así que escribí un código de ejemplo.
Me alegro de que te sirva de referencia.
El código de ejemplo es para el MSP430FR6989.
Vuelva a escribir la dirección si es necesario.
La dirección se puede encontrar en la hoja de datos de cada dispositivo.
typedef unsigned char \_BYTE;
union \_BITFIELD {
\_BYTE BYTE;
struct {
\_BYTE B7 :1;
\_BYTE B6 :1;
\_BYTE B5 :1;
\_BYTE B4 :1;
\_BYTE B3 :1;
\_BYTE B2 :1;
\_BYTE B1 :1;
\_BYTE B0 :1;
} BIT;
};
union un\_gpio { /\* union GPIO \*/
unsigned char BYTE; /\* Byte Access \*/
struct { /\* Bit Access \*/
unsigned char B0 :1;
unsigned char B1 :1;
unsigned char B2 :1;
unsigned char B3 :1;
unsigned char B4 :1;
unsigned char B5 :1;
unsigned char B6 :1;
unsigned char B7 :1;
} BIT;
};
#define GPIO1 (\*(volatile union un\_gpio \*)0x202) /\* IO Address\*/
#define GPIO2 (\*(volatile union un\_gpio \*)0x203) /\* IO Address\*/
#define GPIO3 (\*(volatile union un\_gpio \*)0x222) /\* IO Address\*/
#define GPIO4 (\*(volatile union un\_gpio \*)0x223) /\* IO Address\*/
/\*\*
\* main.c
\*/
int main(void)
{
WDTCTL = WDTPW | WDTHOLD;
PM5CTL0 &= ~LOCKLPM5;
P1DIR |= BIT0;
P1OUT = 0xFF;
while(1)
{
GPIO1.BIT.B0 = 1;
\_\_delay\_cycles(800000);
GPIO1.BIT.B0 = 0;
\_\_delay\_cycles(800000);
}
return 0;
}
0 votos
MSPWare de TI tiene funciones de ayuda para controlar el GPIO (aunque no para todas las subfamilias de MSP430).
2 votos
[Nota del moderador: Este comentario ha llegado a este hilo como resultado de una fusión]. ¿Qué tiene de malo el capítulo 8 del manual de la familia? Tal vez debería proporcionar una pregunta de ejemplo de una "manipulación" muy específica que le gustaría entender cómo hacer. Eso podría ayudar mucho a evitar que te obliguemos a escribir y reproducir un capítulo entero.