bmp280: started working on module.
This commit is contained in:
160
avr/bmp280.asm
Normal file
160
avr/bmp280.asm
Normal file
@@ -0,0 +1,160 @@
|
||||
; ***************************************************************************
|
||||
; 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
|
||||
|
||||
Reference in New Issue
Block a user