1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/examples/shift.c Sun Mar 24 19:54:16 2013 +0000
1.3 @@ -0,0 +1,124 @@
1.4 +#include <ubb/ubb.h>
1.5 +#include <stdio.h>
1.6 +#include <time.h>
1.7 +
1.8 +/* Pin assignments:
1.9 + *
1.10 + * M74HC595B1R
1.11 + *
1.12 + * QB |----| VCC UBB_VDD
1.13 + * QC | | QA
1.14 + * QD | | SI UBB_DAT2
1.15 + * QE | | G UBB_DAT0
1.16 + * QF | | RCK UBB_DAT1
1.17 + * QG | | SCK UBB_CLK
1.18 + * QH | | SCLR UBB_CMD
1.19 + * UBB_GND GND |----| QH' UBB_DAT3
1.20 + */
1.21 +
1.22 +#define SHIFT_SI UBB_DAT2
1.23 +#define SHIFT_QH UBB_DAT3
1.24 +#define SHIFT_SCLR UBB_CMD
1.25 +#define SHIFT_SCK UBB_CLK
1.26 +#define SHIFT_G UBB_DAT0
1.27 +#define SHIFT_RCK UBB_DAT1
1.28 +
1.29 +struct timespec tSCKs = {0, 15},
1.30 + tWH = {0, 15},
1.31 + tWL = {0, 15};
1.32 +
1.33 +void shift_in(uint8_t v)
1.34 +{
1.35 + uint8_t mask;
1.36 +
1.37 + for (mask = 0x80; mask; mask >>= 1)
1.38 + {
1.39 + if (v & mask)
1.40 + {
1.41 + printf("1");
1.42 + SET(SHIFT_SI);
1.43 + }
1.44 + else
1.45 + {
1.46 + printf("0");
1.47 + CLR(SHIFT_SI);
1.48 + }
1.49 +
1.50 + nanosleep(&tSCKs, NULL);
1.51 + SET(SHIFT_SCK);
1.52 + nanosleep(&tWH, NULL);
1.53 + CLR(SHIFT_SCK);
1.54 + }
1.55 +
1.56 + printf("\n");
1.57 +}
1.58 +
1.59 +uint8_t shift_out()
1.60 +{
1.61 + uint8_t mask, result = 0;
1.62 +
1.63 + for (mask = 0x80; mask; mask >>= 1)
1.64 + {
1.65 + if (PIN(SHIFT_QH))
1.66 + {
1.67 + result |= mask;
1.68 + printf("1");
1.69 + }
1.70 + else
1.71 + printf("0");
1.72 +
1.73 + nanosleep(&tSCKs, NULL);
1.74 + SET(SHIFT_SCK);
1.75 + nanosleep(&tWH, NULL);
1.76 + CLR(SHIFT_SCK);
1.77 + }
1.78 +
1.79 + printf("\n");
1.80 + return result;
1.81 +}
1.82 +
1.83 +int main(int argc, char *argv[])
1.84 +{
1.85 + uint8_t result = 0;
1.86 +
1.87 + if (ubb_open(0) < 0) {
1.88 + perror("ubb_open");
1.89 + return 1;
1.90 + }
1.91 +
1.92 + ubb_power(1);
1.93 + printf("Power on.\n");
1.94 +
1.95 + OUT(SHIFT_SI);
1.96 + OUT(SHIFT_RCK);
1.97 + OUT(SHIFT_SCLR);
1.98 + OUT(SHIFT_SCK);
1.99 + OUT(SHIFT_G);
1.100 + IN(SHIFT_QH);
1.101 +
1.102 + CLR(SHIFT_SCK);
1.103 + CLR(SHIFT_RCK);
1.104 +
1.105 + /* Clear the register. */
1.106 +
1.107 + CLR(SHIFT_SCLR);
1.108 + SET(SHIFT_SCK);
1.109 + nanosleep(&tWL, NULL);
1.110 + CLR(SHIFT_SCK);
1.111 + SET(SHIFT_SCLR);
1.112 +
1.113 + /* Shift in a value. */
1.114 +
1.115 + shift_in(0xa6);
1.116 +
1.117 + /* Shift out the value. */
1.118 +
1.119 + result = shift_out();
1.120 +
1.121 + printf("Result: %x\n", result);
1.122 +
1.123 + printf("Closing...\n");
1.124 + ubb_close(0);
1.125 +
1.126 + return 0;
1.127 +}