Продолжаю заниматься SWD.
Выбрал libSWD-0.5. В принципе смог всё прикрутить к иару, но до результата пока рано т.к. ещё не разобрался каким образом выполнять операции на уровне управления ногами SWD.
Как я понял, для этого необходимо найти файлы, в которых описан jtag_interface
Код
/** OpenOCD as for now use global pointer to driver structure. */
extern struct jtag_interface *jtag_interface;
Оттуда мне необходимы методы
transfer(NULL, bits, mosidata, misodata, 0);
bitbang(NULL, "RnW", 0, &val);
Вот например описание функции libswd_drv_miso_8 в которой необходимо использовать jtag_interface->transfer():
Код
int libswd_drv_miso_8(libswd_ctx_t *libswdctx, libswd_cmd_t *cmd, char *data, int bits, int nLSBfirst){
if (data==NULL) return LIBSWD_ERROR_NULLPOINTER;
if (bits<0 && bits>8) return LIBSWD_ERROR_PARAM;
if (nLSBfirst!=0 && nLSBfirst!=1) return LIBSWD_ERROR_PARAM;
static int i;
static signed int res;
static char misodata[8], mosidata[8];
res=jtag_interface->transfer(NULL, bits, mosidata, misodata, LIBSWD_DIR_LSBFIRST);
if (res<0) return LIBSWD_ERROR_DRIVER;
/* Now we need to reconstruct the data byte from shifted in LSBfirst byte array. */
*data=0;
for (i=0;i<bits;i++) *data|=misodata[(nLSBfirst==LIBSWD_DIR_LSBFIRST)?(i):(bits-1-i)]?(1<<i):0;
LOG_DEBUG("OpenOCD's libswd_drv_miso_8(libswdctx=@%p, cmd=@%p, data=@%p, bits=%d, nLSBfirst=0x%02X) reads: 0x%02X", (void*)libswdctx, (void*)cmd, (void*)data, bits, nLSBfirst, *data);
return i;
}
Искал описание/реализацию jtag_interface в openOCD 0.7.0 и в интернете, но пока безуспешно.
Подскажите, кто занимался этим, где найти описание jtag_interface или примеры реализации.
Спасибо.
Возможно поторопился просить помощи....
Скачал архив openocd-libswd-master.zip в котором упоминается jtag_interface и есть примеры реализации.
Сейчас вечер, разбираться с архивом буду завтра.
Но если кто даст полезные ответы, то буду премного благодарен.