Compré una pequeña tabla con un sensor de aceleración (ADXL345) y ahora trato de escribir mis funciones para comunicarme con el IC. Yo uso un STM8S103F3P6 como controlador y ST Visual Develop como IDE. Así que al principio eché un vistazo al "esquema del borde ascendente / descendente":
Asíquealprincipioquieroescribirlafunción"writeCommand", se ve así, actualmente:
void writeCommand(uint16_t cmd){
uint8_t i,k;
GPIOD->ODR |= (1<<SDIO); //turn SDIO HIGH to turn it LOW later
GPIOD->ODR &= ~(1<<CS); //turn CS LOW
delay_ms(2);
GPIOD->ODR &= ~(1<<SCLK); //turn SCLK LOW
for(k = 0; k < 2; k++){ //proceed with toggling R/W and multiple-byte bit
GPIOD->ODR ^= (1<<SDIO);
delay_ms(1);
GPIOD->ODR |= (1<<SCLK);
delay_ms(1);
GPIOD->ODR &= ~(1<<SCLK);
}
for(i = 0; i < 15; i++){ //start writing data
if(cmd & 128){
GPIOD->ODR |= (1<<SDIO);
} else {
GPIOD->ODR &= ~(1<<SDIO);
}
GPIOD->ODR |= (1<<SCLK);
cmd << 1;
GPIOD->ODR &= ~(1<<SCLK);
}
delay_ms(1);
GPIOD->ODR |= (1<<CS);
}
Me pregunto por qué solo hay 6 (A5 ... A0) bits de dirección. No estoy seguro de cómo concatenar el registro en el que quiero escribir y los datos.
¿Sería esta la manera correcta de llamar a mi función?
writeCommand(0x2C << 8 | 0x09); //write 1001 to 0x2C register
Sé que probablemente sea posible hacerlo con hardware SPI, pero quiero aprender a hacerlo mediante software. Quizás algunas preguntas suenen con retraso, pero espero que todavía las contestes :)