Browse Source

Change error no and clean debug code

tags/v1.9
tmk 10 years ago
parent
commit
54a06c2520
2 changed files with 17 additions and 25 deletions
  1. 17
    24
      protocol/ibm4704.c
  2. 0
    1
      protocol/ibm4704.h

+ 17
- 24
protocol/ibm4704.c View File



void ibm4704_init(void) void ibm4704_init(void)
{ {
// POR
//_delay_ms(2500);
//while ( 0xA3 != ibm4704_recv() ) ;

inhibit(); inhibit();
DDRD |= 1<<3;
PORTD &= ~(1<<3);
} }


uint8_t ibm4704_send(uint8_t data) uint8_t ibm4704_send(uint8_t data)
/* Request to send */ /* Request to send */
idle(); idle();
clock_lo(); clock_lo();
PIND |= 1<<3;


/* wait for Start bit(Clock:lo/Data:hi) */ /* wait for Start bit(Clock:lo/Data:hi) */
WAIT(data_hi, 300, 0x30); WAIT(data_hi, 300, 0x30);


/* Data bit */ /* Data bit */
for (uint8_t i = 0; i < 8; i++) { for (uint8_t i = 0; i < 8; i++) {
WAIT(clock_hi, 100, 0x31);
WAIT(clock_hi, 100, 0x40+i);
//_delay_us(5); //_delay_us(5);
PIND |= 1<<3;
if (data&(1<<i)) { if (data&(1<<i)) {
parity = !parity; parity = !parity;
data_hi(); data_hi();
} else { } else {
data_lo(); data_lo();
} }
WAIT(clock_lo, 100, 0x32);
WAIT(clock_lo, 100, 0x48+i);
} }


/* Parity bit */ /* Parity bit */
WAIT(clock_hi, 100, 4);
PIND |= 1<<3;
WAIT(clock_hi, 100, 0x34);
if (parity) { data_hi(); } else { data_lo(); } if (parity) { data_hi(); } else { data_lo(); }
WAIT(clock_lo, 100, 5);
WAIT(clock_lo, 100, 0x35);


/* Stop bit */ /* Stop bit */
WAIT(clock_hi, 100, 4);
WAIT(clock_hi, 100, 0x34);
data_hi(); data_hi();


/* End */ /* End */
WAIT(data_lo, 100, 6);
WAIT(data_lo, 100, 0x36);


inhibit(); inhibit();
_delay_us(200); // wait to recover clock to hi _delay_us(200); // wait to recover clock to hi
return 0; return 0;
ERROR: ERROR:
inhibit(); inhibit();
xprintf("x%02X ", ibm4704_error);
if (ibm4704_error >= 0x30) {
xprintf("x%02X ", ibm4704_error);
}
_delay_us(200); // wait to recover clock to hi _delay_us(200); // wait to recover clock to hi
return -1; return -1;
} }
_delay_us(5); // wait for line settles _delay_us(5); // wait for line settles


/* start bit */ /* start bit */
WAIT(clock_lo, 100, 1); // wait for keyboard to send
WAIT(data_hi, 100, 2); // can be delayed that long
WAIT(clock_lo, 100, 0x11); // wait for keyboard to send
WAIT(data_hi, 100, 0x12); // can be delayed that long


WAIT(clock_hi, 100, 3); // first rising edge which can take longer
WAIT(clock_hi, 100, 0x13); // first rising edge which can take longer
/* data */ /* data */
for (uint8_t i = 0; i < 8; i++) { for (uint8_t i = 0; i < 8; i++) {
WAIT(clock_hi, 100, 0x20+i); WAIT(clock_hi, 100, 0x20+i);
} }


/* parity */ /* parity */
WAIT(clock_hi, 100, 7);
WAIT(clock_hi, 100, 0x17);
if (data_in() != parity) { if (data_in() != parity) {
ibm4704_error = IBM4704_ERR_PARITY; ibm4704_error = IBM4704_ERR_PARITY;
goto ERROR; goto ERROR;
} }
WAIT(clock_lo, 150, 8);
WAIT(clock_lo, 150, 0x18);


/* stop bit */ /* stop bit */
WAIT(clock_hi, 100, 9);
WAIT(data_lo, 1, 9);
WAIT(clock_hi, 100, 0x19);
WAIT(data_lo, 1, 0x19);


inhibit(); inhibit();
_delay_us(200); // wait to recover clock to hi _delay_us(200); // wait to recover clock to hi
return data; return data;
ERROR: ERROR:
if (ibm4704_error > 2) {
if (ibm4704_error > 0x12) {
xprintf("x%02X ", ibm4704_error); xprintf("x%02X ", ibm4704_error);
} }
inhibit(); inhibit();

+ 0
- 1
protocol/ibm4704.h View File

#define IBM4704_H #define IBM4704_H


#define IBM4704_ERR_NONE 0 #define IBM4704_ERR_NONE 0
#define IBM4704_ERR_STARTBIT 1
#define IBM4704_ERR_PARITY 0x70 #define IBM4704_ERR_PARITY 0x70





Loading…
Cancel
Save