[openfirmware] [commit] r2106 - cpu/arm/olpc/1.75

repository service svn at openfirmware.info
Sat Jan 8 11:16:59 CET 2011


Author: wmb
Date: Sat Jan  8 11:16:58 2011
New Revision: 2106
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2106

Log:
OLPC XO-1.75 A2 - Made compass driver work and tweaked on accelerometer driver.

Modified:
   cpu/arm/olpc/1.75/compass.fth

Modified: cpu/arm/olpc/1.75/compass.fth
==============================================================================
--- cpu/arm/olpc/1.75/compass.fth	Sat Jan  8 11:15:54 2011	(r2105)
+++ cpu/arm/olpc/1.75/compass.fth	Sat Jan  8 11:16:58 2011	(r2106)
@@ -5,6 +5,7 @@
    4 to smb-clock-gpio#
    5 to smb-data-gpio#
    h# 3c to smb-slave
+   5 smb-data-gpio# gpio-dir-out
 ;
 : smb-init    ( -- )  set-compass-slave  smb-on  smb-pulses  ;
 
@@ -12,31 +13,48 @@
 : compass!  ( byte reg# -- )  set-compass-slave  smb-byte!  ;
 : open  ( -- okay? )
    0 0 ['] compass! catch  if  false exit  then
-   h# a  compass@  [char] H  <>
+   h# a  compass@  [char] H  =  if
+      0 2 compass!   \ Continuous conversion mode
+      true
+   else
+      false
+   then
 ;
 : close  ( -- )
+   2 2 compass!  \ Idle mode
+;
+: dir@  ( reg# -- n )
+   dup compass@  swap 1+ compass@   swap  bwjoin  wextend
+;
+: direction@  ( -- x y z )
+   begin  9 compass@ 1 and  until
+   3 dir@  5 dir@  7 dir@  ( x y z )
 ;
-\ XXX need some words to take compass readings
-
 end-package
 
 0 0  " "  " /" begin-package
 " combo-accelerometer" name
 
-: set-sensor-slave  ( -- )  h# 30 6 set-twsi-target  ;
-: sensor@  ( reg# -- byte )  set-sensor-slave  twsi-b@  ;
-: sensor!  ( byte reg# -- )  set-sensor-slave  twsi-b@  ;
+\ : set-sensor-slave  ( -- )  h# 30 6 set-twsi-target  ;
+: set-sensor-slave  ( -- )
+   4 to smb-clock-gpio#
+   5 to smb-data-gpio#
+   h# 30 to smb-slave
+   5 smb-data-gpio# gpio-dir-out
+;
+
+: sensor@  ( reg# -- byte )  set-sensor-slave  smb-byte@  ;
+: sensor!  ( byte reg# -- )  set-sensor-slave  smb-byte@  ;
 
 : accelerometer-on   ( -- )   h# 27 h# 20 sensor!  ;
 : accelerometer-off  ( -- )   h# 07 h# 20 sensor!  ;
-: wext  ( w -- l )  dup h# 8000 and  if  h# ffff0000 or  then  ;
 : acceleration@  ( -- x y z )
    set-sensor-slave
-   h# 28 1 6 twsi-get  ( xl xh yl yh zl zh )
+   6 h# 28 smb-read-n  ( xl xh yl yh zl zh )
    2>r 2>r             ( xl xh )
-   bwjoin wext         ( x r: zl,zh yl,yh )
-   2r> bwjoin wext     ( x y r: zl,zh )
-   2r> bwjoin wext     ( x y z )
+   bwjoin wextend      ( x r: zl,zh yl,yh )
+   2r> bwjoin wextend  ( x y r: zl,zh )
+   2r> bwjoin wextend  ( x y z )
 ;   
 
 : open  ( -- okay? )



More information about the openfirmware mailing list