For BU9480F D-A Conv.

Dependencies:   mbed

Committer:
lynxeyed_atsu
Date:
Thu Aug 26 12:48:50 2010 +0000
Revision:
0:805cffac956b
Child:
1:02bfb013660c

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lynxeyed_atsu 0:805cffac956b 1 #include "mbed.h"
lynxeyed_atsu 0:805cffac956b 2 #include "string"
lynxeyed_atsu 0:805cffac956b 3 #include "_bitio.h"
lynxeyed_atsu 0:805cffac956b 4
lynxeyed_atsu 0:805cffac956b 5
lynxeyed_atsu 0:805cffac956b 6 /*
lynxeyed_atsu 0:805cffac956b 7 #define TRUE 1
lynxeyed_atsu 0:805cffac956b 8 #define FALSE 0
lynxeyed_atsu 0:805cffac956b 9 */
lynxeyed_atsu 0:805cffac956b 10 #define rightbits(n, x) ((x) & ((1U << (n)) - 1U))
lynxeyed_atsu 0:805cffac956b 11 /*
lynxeyed_atsu 0:805cffac956b 12 typedef unsigned int Uint;
lynxeyed_atsu 0:805cffac956b 13 typedef unsigned char Uchar;
lynxeyed_atsu 0:805cffac956b 14 */
lynxeyed_atsu 0:805cffac956b 15 FILE *infp, *outfp;
lynxeyed_atsu 0:805cffac956b 16 int getcount, putcount;
lynxeyed_atsu 0:805cffac956b 17 Uint bitbuf;
lynxeyed_atsu 0:805cffac956b 18
lynxeyed_atsu 0:805cffac956b 19 void init_bit_o(void)
lynxeyed_atsu 0:805cffac956b 20 {
lynxeyed_atsu 0:805cffac956b 21 putcount = 8; bitbuf = 0;
lynxeyed_atsu 0:805cffac956b 22 }
lynxeyed_atsu 0:805cffac956b 23
lynxeyed_atsu 0:805cffac956b 24 void init_bit_i(void)
lynxeyed_atsu 0:805cffac956b 25 {
lynxeyed_atsu 0:805cffac956b 26 getcount = 0; bitbuf = 0;
lynxeyed_atsu 0:805cffac956b 27 }
lynxeyed_atsu 0:805cffac956b 28
lynxeyed_atsu 0:805cffac956b 29
lynxeyed_atsu 0:805cffac956b 30 Uint getbit(void)
lynxeyed_atsu 0:805cffac956b 31 {
lynxeyed_atsu 0:805cffac956b 32 int flag;
lynxeyed_atsu 0:805cffac956b 33 if (--getcount >= 0) return (bitbuf >> getcount) & 1U;
lynxeyed_atsu 0:805cffac956b 34 getcount = 7;
lynxeyed_atsu 0:805cffac956b 35 if((flag = fgetc(infp))==EOF)return OVERRUN;
lynxeyed_atsu 0:805cffac956b 36 else bitbuf = flag;
lynxeyed_atsu 0:805cffac956b 37 return (bitbuf >> 7) & 1U;
lynxeyed_atsu 0:805cffac956b 38 }
lynxeyed_atsu 0:805cffac956b 39
lynxeyed_atsu 0:805cffac956b 40 Uint getbits(int n)
lynxeyed_atsu 0:805cffac956b 41 {
lynxeyed_atsu 0:805cffac956b 42 Uint x = 0;
lynxeyed_atsu 0:805cffac956b 43 if (n < 1 || 25 < n) return 0;
lynxeyed_atsu 0:805cffac956b 44 while (n > getcount) {
lynxeyed_atsu 0:805cffac956b 45 n -= getcount;
lynxeyed_atsu 0:805cffac956b 46 x |= rightbits(getcount, bitbuf) << n;
lynxeyed_atsu 0:805cffac956b 47 bitbuf = fgetc(infp); getcount = 8;
lynxeyed_atsu 0:805cffac956b 48 }
lynxeyed_atsu 0:805cffac956b 49 getcount -= n;
lynxeyed_atsu 0:805cffac956b 50 return x | rightbits(n, bitbuf >> getcount);
lynxeyed_atsu 0:805cffac956b 51 }
lynxeyed_atsu 0:805cffac956b 52
lynxeyed_atsu 0:805cffac956b 53
lynxeyed_atsu 0:805cffac956b 54 void putbit(Uint bit)
lynxeyed_atsu 0:805cffac956b 55 {
lynxeyed_atsu 0:805cffac956b 56 putcount--;
lynxeyed_atsu 0:805cffac956b 57 if (bit != 0) bitbuf |= (1 << putcount);
lynxeyed_atsu 0:805cffac956b 58 if (putcount == 0) {
lynxeyed_atsu 0:805cffac956b 59 if (fputc(bitbuf, outfp) == EOF) error("can't write\r\n");
lynxeyed_atsu 0:805cffac956b 60 bitbuf = 0; putcount = 8;
lynxeyed_atsu 0:805cffac956b 61 }
lynxeyed_atsu 0:805cffac956b 62 }
lynxeyed_atsu 0:805cffac956b 63
lynxeyed_atsu 0:805cffac956b 64
lynxeyed_atsu 0:805cffac956b 65 void putbits(int n, Uint x)
lynxeyed_atsu 0:805cffac956b 66 {
lynxeyed_atsu 0:805cffac956b 67 if (n < 1 || 25 < n) return;
lynxeyed_atsu 0:805cffac956b 68 while (n >= putcount) {
lynxeyed_atsu 0:805cffac956b 69 n -= putcount;
lynxeyed_atsu 0:805cffac956b 70 bitbuf |= rightbits(putcount, x >> n);
lynxeyed_atsu 0:805cffac956b 71 if (fputc(bitbuf, outfp) == EOF) error("cant write\r\n");
lynxeyed_atsu 0:805cffac956b 72 bitbuf = 0U; putcount = 8;
lynxeyed_atsu 0:805cffac956b 73 }
lynxeyed_atsu 0:805cffac956b 74 putcount -= n;
lynxeyed_atsu 0:805cffac956b 75 bitbuf |= rightbits(n, x) << putcount;
lynxeyed_atsu 0:805cffac956b 76 }