2 Copyright © 2010-2014, The AROS Development Team. All rights reserved.
6 #include <aros/symbolsets.h>
7 #include <aros/debug.h>
8 #include <proto/exec.h>
12 #include <asm/bcm2835.h>
15 #include "i2c-bcm2835.h"
17 void METHOD(I2CBCM2835
, Hidd_I2C
, PutByte
)
19 while (!((*(volatile UBYTE
*)BSC0_STATUS
) & BSC_STATUS_DONE
))
21 asm volatile ("mov r2,r2\n");
24 *(volatile UBYTE
*)BSC0_DATALEN
= 1;
25 *(volatile UBYTE
*)BSC0_FIFO
= msg
->data
;
27 *(volatile UBYTE
*)BSC0_STATUS
= BSC_CLEAR
;
28 *(volatile UBYTE
*)BSC0_CONTROL
= BSC_WRITE
;
31 void METHOD(I2CBCM2835
, Hidd_I2C
, GetByte
)
33 while (!((*(volatile UBYTE
*)BSC0_STATUS
) & BSC_STATUS_DONE
))
35 asm volatile ("mov r2,r2\n");
38 *(volatile UBYTE
*)BSC0_DATALEN
= 1;
39 *(volatile UBYTE
*)BSC0_STATUS
= BSC_CLEAR
;
40 *(volatile UBYTE
*)BSC0_CONTROL
= BSC_READ
;
42 *msg
->data
= *(volatile UBYTE
*)BSC0_FIFO
;
45 void I2CBCM2835_Init(void)
47 /* BSC0 is on GPIO 0 & 1 */
48 *(volatile UBYTE
*)GPFSEL0
&= ~0x3f; // Mask out bits 0-5
49 *(volatile UBYTE
*)GPFSEL0
|= 0x24; // Set bits 0-5 to binary '100100'
53 ADD2LIBS((STRPTR
)"i2c.hidd", 0, static struct Library
*, I2CBase
);