Muy buenas, soy nuevo en este foro aunque sigo las respuestas a las preguntas que se realizan. Tengo un problema que no soy capaz de resolver: Si alguno ha trabajado con microcontroladores sabe que programar sus registros es bastante fácil, por ejemplo:
U1STAbits.UTXEN = 0 que hace referencia al bit UTXEN del registro de 16 bits U1STA, pues bien, pretendo hacer algo similar con Arduino valiéndome de una struct de 16 bits, aunque no es para programar sus registros:
struct StructOrdenFPGA {
uint8_t SelectorEntrada :2; //PB0 y PB1
uint8_t EntradaSubidaBajada :1; //PB2
uint8_t DivisorEntrada :5; //PB3 a PB7
uint8_t CNT :2; //PB8 y PB9
uint8_t RESContador :1; //PB11
};
StructOrdenFPGA TramaParaFPGA, *DIRTramaParaFPGA;
Con el compilador CCS es muy fácil hacer y recuperar los cambios necesarios modificando los bits, por ejemplo:
TramaParaFPGA.SelectorEntrada = 0b10;
TramaParaFPGA.RESContador = 0b1;
(Estos cambios, obviamente Arduino los hace sin problemas)
En CCS los cambios ya se ven reflejados en Variable16 porque el puntero apunta a la primera dirección que ocupa la struct sin importar si es una variable o una struct:
unsigned int16 *Variable16 = &TramaParaFPGA;
En Arduino no soy capaz de obtener una variable que contenga los 16 bits porque los punteros son de tipo struct y no veo la forma de obtener su primera dirección para recuperar la variable modificada.
¿Alguna sugerencia de como se puede hacer? Muchas gracias
const uint32_t SERIAL_SPEED{256000};
struct StructOrdenFPGA {
uint8_t SelectorEntrada :2; //PB0 y PB1
uint8_t EntradaSubidaBajada :1; //PB2
uint8_t DivisorEntrada :5; //PB3 a PB7
uint8_t CNT :2; //PB8 y PB9
uint8_t RESContador :1; //PB11
}; //data_record is a structure type
StructOrdenFPGA TramaParaFPGA, *DIRTramaParaFPGA;
//////////////////////////////////////////////////////////////
void setup() {
Serial.begin(SERIAL_SPEED);
while (Serial.available()>0) Serial.read();
Serial.println();
uint16_t Valor16 = 44;
uint16_t &DIRValor16 = Valor16;
Serial.println(DIRValor16);
TramaParaFPGA.SelectorEntrada = 0b10;
TramaParaFPGA.RESContador = 0b1;
DIRTramaParaFPGA = &TramaParaFPGA;
Serial.println((*DIRTramaParaFPGA).SelectorEntrada); //Imprime el valor de los dos primeros bits
}
//////////////////////////////////////////
void loop() {
}