Использую последнюю версию ядра uClinux. Пытаюсь работать со SPORTом.
Конфигурирую SPORT на на генерацию внутренних клоков-фрэймов, так и внешних.
На передачу данные выдаются, когда клоки и фрэймы внутренние генерируются. Вижу на шине данных, всё ок. Пытаюсь читать с из порта - читаются всё время FFFF-ки. Когда клоки-фрэймы внутренне генерируются в BF537, устройство на том конце выдаёт данные по их обнаружению (см осциллограмму). Когда клоки от устройства на том конце он с ними и выдаёт данные.
Прерывания отрабатываются как на приёме так и на передаче без ошибок переполнения, сбоев и т.д. А вот с данными на приём непонятно.
Конфигурация порта:
cfg->mode = NORM_MODE;
cfg->data_format = NORM_FORMAT;
cfg->fsync = 1;
cfg->int_clk_rx = 1; // (or in other case =0)
cfg->int_clk_tx = 1;
cfg->word_len = 16;
cfg->serial_clk = 2000000; // 2 MHz
cfg->fsync_clk = 62500; //
Код в моём приложении:
int n;
char msg[3];
while(1)
{
n = read(sport0, msg, 2);
printf("readed %d words: %c%c 0x%x%x\n", n, msg[0], msg[1], msg[0], msg[1]);
}
Рузультат:
readed 2 words: ЪЪ 0xFFFFFFFFFFFFFFFF
Где поискать источник ошибки?