Comply to new sipo module.
authorasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 31 Mar 2009 09:21:23 +0000 (09:21 +0000)
committerasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 31 Mar 2009 09:21:23 +0000 (09:21 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@2447 38d2e660-2303-0410-9eaa-f027e97ec537

examples/triface/hw/hw_sipo.h
examples/triface/protocol.c
examples/triface/protocol.h
examples/triface/triface.c
examples/triface/triface.mk

index f41e35f95889903874a529fea847f5179c0bb78d..d2cfde750633f489aa610ed06bfc7693b68affa6 100644 (file)
  *
  * \version $Id$
  *
- * \author Andrea Grandi <andrea@develer.com>
+ * \author Daniele Basile <asterix@develer.com>
  */
+
 #ifndef HW_SIPO_H
 #define HW_SIPO_H
 
-#define LOAD_HIGH     (PORTB |= BV(PB3))
-#define LOAD_LOW      (PORTB &= ~BV(PB3))
-#define LOAD_INIT     (DDRB |= BV(PB3))
-#define SET_SCK_OUT   (DDRB |= BV(PB1))
-#define SET_SOUT_OUT  (DDRB |= BV(PB2))
-#define CLOCK_HIGH    (PORTB |= BV(PB1))
-#define CLOCK_LOW     (PORTB &= ~BV(PB1))
-#define SET_SOUT_HIGH (PORTB |= BV(PB2))
-#define SET_SOUT_LOW  (PORTB &= ~BV(PB2))
-#define CLOCK_PULSE   do { CLOCK_HIGH; CLOCK_LOW; } while(0)
+#include <cfg/macros.h>
+
+#include <avr/io.h>
+
+//Set output pin for sipo
+#define SCK_OUT            (DDRB |= BV(PB1))  // Load clock pin
+#define SOUT_OUT           (DDRB |= BV(PB2))  // Serial in pin
+#define SLOAD_OUT          (DDRB |= BV(PB3))  // Store clock pin
+#define OE_OUT             (DDRG |= BV(PG3))  // Output enable pin
+
+//Define output level
+#define SCK_HIGH           (PORTB |= BV(PB1))
+#define SCK_LOW            (PORTB &= ~BV(PB1))
+#define SOUT_OUT_HIGH      (PORTB |= BV(PB2))
+#define SOUT_OUT_LOW       (PORTB &= ~BV(PB2))
+#define SLOAD_OUT_HIGH     (PORTB |= BV(PB3))
+#define SLOAD_OUT_LOW      (PORTB &= ~BV(PB3))
+#define OE_LOW             (PORTG &= BV(PG3))
+
+/**
+ * Define the procedure to set one bit low/hight to
+ * serial input in sipo device.
+ */
+#define SIPO_SI_HIGH()    SOUT_OUT_HIGH
+#define SIPO_SI_LOW()     SOUT_OUT_LOW
+
+/**
+ * Drive pin to load the bit, presented in serial-in pin,
+ * into sipo shift register.
+ */
+#define SIPO_SI_CLOCK() \
+       do{ \
+               SCK_HIGH; \
+               SCK_LOW; \
+       }while(0)
 
-#define OE_OUT        (DDRG |= BV(PG3))
-#define OE_LOW        (PORTG &= BV(PG3))
+/**
+ * Clock the content of shift register to output.
+ */
+#define SIPO_LOAD() \
+       do { \
+               SLOAD_OUT_HIGH; \
+               SLOAD_OUT_LOW; \
+       }while(0)
+
+/**
+ * Enable the shift register output.
+ */
+#define SIPO_ENABLE() OE_LOW;
+
+
+/**
+ * Do anything that needed to init sipo pins.
+ */
+#define SIPO_INIT_PIN() \
+       do { \
+               OE_OUT; \
+               SOUT_OUT; \
+               SCK_OUT; \
+               SLOAD_OUT; \
+               SIPO_ENABLE(); \
+       } while(0)
 
 
-#endif // HW_SIPO_H
+#endif /* HW_SIPO_H */
index 1f630a1b3e9ea97835e2ee031167782cd968d4df..156a414bc802983c28bc6a3f2d0f0ba43ba94497 100644 (file)
@@ -45,6 +45,7 @@
 #include "protocol.h"
 #include "cmd_ctor.h"  // MAKE_CMD, REGISTER_CMD
 #include "verstag.h"
+
 #include "hw/hw_adc.h"
 #include "hw/hw_input.h"
 
@@ -83,6 +84,8 @@ static bool interactive;
 /// Readline context, used for interactive mode.
 static struct RLContext rl_ctx;
 
+static Sipo fd_sipo;
+
 uint8_t reg_status_dout;
 /**
  * Send a NAK asking the host to send the current message again.
@@ -280,7 +283,7 @@ MAKE_CMD(ping, "", "",
 /* Dout  */
 MAKE_CMD(dout, "d", "",
 ({
-       sipo_putchar((uint8_t)args[1].l);
+       kfile_write(&fd_sipo.fd, (uint8_t *)&args[1].l, 1);
 
        //Store status of dout ports.
        reg_status_dout = (uint8_t)args[1].l;
@@ -356,6 +359,9 @@ static void protocol_registerCmds(void)
 /* Initialization: readline context, parser and register commands.  */
 void protocol_init(KFile *fd)
 {
+       /* SPI Port Initialization */
+       sipo_init(&fd_sipo);
+
        interactive = FORCE_INTERACTIVE;
 
        rl_init_ctx(&rl_ctx);
index 26113482fca067c3d0738c3894a38702fb4f6453..0c2500767bf6a4235b1608727e5ba13816c01cfa 100644 (file)
@@ -42,6 +42,8 @@
 #ifndef PROTOCOL_H
 #define PROTOCOL_H
 
+#include <drv/sipo.h>
+
 #include <kern/kfile.h>
 
 void protocol_init(KFile *fd);
index 86f21b2d22fb806dd4c96a8def5a8b07acd22137..3707aaa55edc7939e9482dc96fe8c11ae3890cf2 100644 (file)
 #include <drv/timer.h>
 #include <drv/buzzer.h>
 #include <drv/ser.h>
-#include <drv/sipo.h>
 
 #include <mware/parser.h>
 #include <net/keytag.h>
 
-
-
 static Serial fd_ser;
 static Serial tag_ser;
 
 int main(void)
 {
-       /* SPI Port Initialization */
-       sipo_init();
-
        kdbg_init();
        timer_init();
        adc_init();
index 430c421fac60f215d95d9cf5f6c03d08225b7b8e..85cb1edd496391c0282509c8c4fecfcd71fc3f90 100644 (file)
@@ -40,8 +40,8 @@ triface_CSRC = \
        bertos/drv/timer.c \
        bertos/drv/ser.c \
        bertos/drv/buzzer.c \
+       bertos/drv/sipo.c \
        bertos/cpu/avr/drv/ser_avr.c \
-       bertos/cpu/avr/drv/sipo.c \
        bertos/mware/formatwr.c \
        bertos/mware/hex.c \
        bertos/struct/hashtable.c \