; *************************************************************************** ; BMP280 module ; (c) 2023 Martin Preuss ; ; *************************************************************************** ; defines ; *************************************************************************** ; data .dseg bmp280DataBegin: bmp280Id: .byte 1 bmp280DataEnd: ; *************************************************************************** ; code .cseg ; --------------------------------------------------------------------------- ; BMP280_Init ; ; IN: ; - nothing ; OUT: ; - CFLAG: set if okay, clear on error ; USED: BMP280_Init: ldi xh, HIGH(bmp280DataBegin) ldi xl, LOW(bmp280DataBegin) clr r16 ldi r17, (bmp280DataEnd-bmp280DataBegin) rcall Utils_FillSram rcall bmp280ReadId brcc BMP280_Init_error lds bmp280Id, r16 ; store id push r16 rcall bmp280PrintDebug pop r2 ; pop r16 into r2 ldi r16, 240 mov r1, r16 ldi r16, 0xff rcall COM_EnqueueDebug sec ret BMP280_Init_error: clc ret ; --------------------------------------------------------------------------- ; BMP280_Fini ; ; IN: ; - nothing ; OUT: ; - CFLAG: set if okay, clear on error ; USED: BMP280_Fini: sec ret ; --------------------------------------------------------------------------- ; bmp280ReadId ; ; IN: ; - nothing ; OUT: ; - CFLAG: set if okay, clear on error ; - R16 : id (most probably 0x60) ; USED: R15, R16 (R17, R18, R22) bmp280ReadId: in r15, SREG cli rcall twiStart ; (R22) ldi r16, (BMP280_ADDR*2) ; start in write mode rcall twiSendByteExpectAck ; (R16, R17, R18, R22) brcc bmp280ReadId_error ldi r16, 0xd0 ; register "id" rcall twiSendByteExpectAck ; (R16, R17, R18, R22) brcc bmp280ReadId_error rcall twiRestart ; (R22) ldi r16, (BMP280_ADDR*2)+1 ; restart in read mode rcall twiSendByteExpectAck ; (R16, R17, R18, R22) brcc bmp280ReadId_error rcall twiReceiveByteSendAck ; read ID brcc bmp280ReadId_error rcall twiStop ; (R22) out SREG, r15 sec ret bmp280ReadId_error: rcall twiStop ; (R22) out SREG, r15 clc ret ; --------------------------------------------------------------------------- ; bmp280ReadRegsToSram ; ; IN: ; - X: pointer to buffer to read data in ; - R18: first register to read from ; - R19: number of registers to read ; OUT: ; - CFLAG: set if okay, clear on error ; - R16 : id (most probably 0x60) ; USED: R15, R16 (R17, R18, R22) bmp280ReadRegsToSram: in r15, SREG cli mov r1, r18 mov r2, r19 rcall twiStart ; (R22) ldi r16, (BMP280_ADDR*2) ; start in write mode rcall twiSendByteExpectAck ; (R16, R17, R18, R22) brcc bmp280ReadRegsToSram_error mov r16, r1 ; first register to read rcall twiSendByteExpectAck ; (R16, R17, R18, R22) brcc bmp280ReadRegsToSram_error rcall twiRestart ; (R22) ldi r16, (BMP280_ADDR*2)+1 ; restart in read mode rcall twiSendByteExpectAck ; (R16, R17, R18, R22) brcc bmp280ReadRegsToSram_error bmp280ReadRegsToSram_loop: rcall twiReceiveByteSendAck ; read register content brcc bmp280ReadRegsToSram dec r2 brne bmp280ReadRegsToSram_loop rcall twiStop ; (R22) out SREG, r15 sec ret bmp280ReadRegsToSram_error: rcall twiStop ; (R22) out SREG, r15 clc ret