Tengo un módulo SPI que tiene una función de inicializador:
static volatile uint8_t *registerOut, *registerIn, *registerDir;
static uint8_t clock, dataIn, dataOut;
void SpiInit(volatile uint8_t *pRegisterOut, volatile uint8_t *pRegisterIn,
volatile uint8_t *pRegisterDir, uint8_t pClock, uint8_t pDataIn,
uint8_t pDataOut)
{
registerOut = pRegisterOut;
registerIn = pRegisterIn;
registerDir = pRegisterDir;
clock = pClock;
dataIn = pDataIn;
dataOut = pDataOut;
/* access registers */
*registerOut |= (1<<dataOut) | (1<<clock); /* set dataOut pin and clock as output */
/* etc. */
}
Un ejemplo de llamada se vería así:
SpiInit(&PORTB, &PINB, &DDRB, PB2, PB1, PB0);
Ahora me pregunto si hay una manera de no tener que pasar todos los registros que están conectados semánticamente ( PORTB
, PINB
y DDRB
). Me gustaría pasar solo una referencia PORTx
y de alguna manera derivar a sus registros conectados PINx
y DDRx
.