Sync/Async bitbang mode now works (flushed write and read buffer instead only read buffer)

master
Stefan Krulj 12 years ago
parent e0c708eceb
commit 364f5b1ea0
  1. 49
      src/DAP_config.h

@ -174,7 +174,7 @@ static __inline const char* pin_to_str(uint8_t pin){
static __inline void FTDI_BITBANG_SETUP() {
int success;
/* Enable bitbang mode */
success = ftdi_set_bitmode(&__ftdic, dir_state, BITMODE_SYNCBB );
success = ftdi_set_bitmode(&__ftdic, dir_state, BITMODE_BITBANG );
if( success<0 ){
DEBUGF("Could not change to async. bitbang: %s\n",ftdi_get_error_string(&__ftdic));
}
@ -203,17 +203,7 @@ static __forceinline void FTDI_WRITE_OUT( ) {
}
FTDI_WRITE_OUT_READ_MODE( );
/* every write generates the same amout of reads */
success = 0;
while(out_state_buff_pos!=0) {
success = ftdi_read_data(&__ftdic,in_buff,out_state_buff_pos);
if( success < 0 ) {
DEBUGF("Could not read pins: %s\n",ftdi_get_error_string(&__ftdic));
exit(1);
}
out_state_buff_pos -= success;
}
out_state_buff_pos = 0;
}
@ -236,7 +226,7 @@ static __inline void FTDI_BEGIN_READ(){
if( success<0 ){
DEBUGF("Could not change to sync. bitbang: %s\n",ftdi_get_error_string(&__ftdic));
}
success = ftdi_usb_purge_rx_buffer(&__ftdic);
success = ftdi_usb_purge_buffers(&__ftdic);
if( success<0 ){
DEBUGF("Could not flush buffer: %s\n",ftdi_get_error_string(&__ftdic));
}
@ -274,7 +264,7 @@ static __inline void FTDI_END_READ(){
}
pin_read_pos = is_in_read_mode = 0;
success = ftdi_set_bitmode(&__ftdic, dir_state, BITMODE_SYNCBB );
success = ftdi_set_bitmode(&__ftdic, dir_state, BITMODE_BITBANG );
if( success<0 ){
DEBUGF("Could not change to async. bitbang: %s\n",ftdi_get_error_string(&__ftdic));
}
@ -372,8 +362,6 @@ static __inline void PORT_SWD_SETUP (void) {
static __forceinline uint32_t PIN_IN ( uint8_t pin ) {
uint8_t c;
if( dir_state & pin ){
//dir_state &= ~pin;
//ftdi_set_bitmode(&__ftdic, dir_state, BITMODE_SYNCBB );
DEBUGF("Pin %s is not an input pin!\n", pin_to_str(pin));
}
int success = ftdi_read_pins(&__ftdic,&c);
@ -385,8 +373,6 @@ static __forceinline uint32_t PIN_IN ( uint8_t pin ) {
static __forceinline void PIN_SET ( uint8_t pin, uint32_t bit ) {
if( !(dir_state & pin) ){
//dir_state |= pin;
//ftdi_set_bitmode(&__ftdic, dir_state, BITMODE_SYNCBB );
DEBUGF("Pin %s is not an output pin!\n", pin_to_str(pin));
return;
}
@ -400,33 +386,6 @@ static __forceinline void PIN_SET ( uint8_t pin, uint32_t bit ) {
}
}
/*
static __forceinline void PIN_SET ( uint8_t pin, uint32_t bit ) {
int success;
uint8_t is_set = out_state & pin;
if(bit){
out_state |= pin;
success = ftdi_write_data(&__ftdic,&out_state,1);
if( success<0 ){
DEBUG("Could not write pin TCK_SWCLK: %s\n",ftdi_get_error_string(&__ftdic));
if(!is_set){
out_state &= ~pin;
}
}
}else{
out_state &= ~pin;
success = ftdi_write_data(&__ftdic,&out_state,1);
if( success<0 ){
DEBUG("Could not write pin TCK_SWCLK: %s\n",ftdi_get_error_string(&__ftdic));
if(is_set){
out_state |= pin;
}
}
}
}
*/
extern void late_close_socket();
/** Disable JTAG/SWD I/O Pins.
Disables the DAP Hardware I/O pins which configures:

Loading…
Cancel
Save