Атмег 0 28 июля, 2016 Опубликовано 28 июля, 2016 · Жалоба Всем доброго дня! К omap по uPP подключаю трансивер ad9361, один канал на передачу, второй на прием, rx_clk и tx_clk по 31 МГц, на UPP_2xTXCLK заведен клок 62 МГц. Для начала хочу запустить такой код: // Reset the module reg = uppRegs->UPPCR; CSL_FINST(reg, UPP_UPPCR_SWRST, RESET); i = 2000; while (--i); CSL_FINST(reg, UPP_UPPCR_SWRST, RUNNING); uppRegs->UPPCR = reg; // Full duplex, A - TX, B - RX reg = uppRegs->UPCTL; CSL_FINST(reg, UPP_UPCTL_MODE, DUPLEX1); CSL_FINST(reg, UPP_UPCTL_CHN, TWO); // DDR, 12 bit data width CSL_FINST(reg, UPP_UPCTL_DRA, DOUBLE); CSL_FINST(reg, UPP_UPCTL_IWA, 16BIT); CSL_FINST(reg, UPP_UPCTL_DPWA, 12BIT); CSL_FINST(reg, UPP_UPCTL_DRB, DOUBLE); CSL_FINST(reg, UPP_UPCTL_IWB, 16BIT); CSL_FINST(reg, UPP_UPCTL_DPWB, 12BIT); uppRegs->UPCTL = reg; // Start/enable pins settings reg = uppRegs->UPICR; CSL_FINST(reg, UPP_UPICR_STARTA, DISABLE); CSL_FINST(reg, UPP_UPICR_ENAA, ENABLE); CSL_FINST(reg, UPP_UPICR_STARTB, DISABLE); CSL_FINST(reg, UPP_UPICR_ENAB, ENABLE); uppRegs->UPICR = reg; // Idle value reg = uppRegs->UPIVR; CSL_FINS(reg, UPP_UPIVR_VALA, 0xFFFF); // TODO CSL_FINS(reg, UPP_UPIVR_VALB, 0xFFFFu); uppRegs->UPIVR = reg; // Enable uPP reg = uppRegs->UPPCR; CSL_FINST(reg, UPP_UPPCR_EN, ENABLE); CSL_FINST(reg, UPP_UPPCR_RTEMU, ENABLE); CSL_FINST(reg, UPP_UPPCR_SOFT, ENABLE); uppRegs->UPPCR = reg; for (i = 0; i < 64; i++) recv_buffer[i] = -1; while (1) { // System_printf(" --- Generating sine wave ---\n"); for (i = 1; i < 1464843; i++) { uppRegs->UPID0 = (Uint32)&xmit_buffer; uppRegs->UPID1 = (1 << 16)|128; // 1 lines 128 bytes per line uppRegs->UPID2 = 128; // no offset between lines while (CSL_FEXT(uppRegs->UPIS2, UPP_UPIS2_PEND)); } System_printf(" --- Collecting 64 samples from ADC --- \n"); uppRegs->UPQD0 = (Uint32)&recv_buffer; uppRegs->UPQD1 = (1 << 16)|128; // 1 lines 128 bytes per line uppRegs->UPQD2 = 128; // no offset between lines while (CSL_FEXT(uppRegs->UPQS2, UPP_UPQS2_PEND)); for (i = 0; i < 64; i += 2) System_printf("%d %d\n", recv_buffer[i], recv_buffer[i+1]); } 1) Несколько транзакций проходит нормально, вижу на выходе модуляцию, потом все стопорится на while (CSL_FEXT(uppRegs->UPIS2, UPP_UPIS2_PEND)); Поднимается флажок UORI в UPISR. Не оч понял из ДШ, при каких условиях это может происходить, понял только, что на это влияет клок, но он в моем случае с большим запасом по сравнению с максимальными 75. 2) По адресу recv_buffer память не меняется. Физически заведены кроме клока и данных только линии enable. Остальные не используются и я их отключаю в UPICR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Озон 0 31 июля, 2016 Опубликовано 31 июля, 2016 · Жалоба Заранее прошу прощение у автора, но чтоб не плодить новую тему спрошу здесь. Есть OMAP-L137 и OMAP-L138. У 137-го отсутствует UPP (универсальный параллельный порт), но он привлекает более "снисходительным" корпусом BGA. Без UPP можно как то нормально подключить к данному камню параллельное ADC, где то так на 10-20MSPS? Или же всё таки лучше на 138-м остановиться с UPP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 31 июля, 2016 Опубликовано 31 июля, 2016 · Жалоба 1) Несколько транзакций проходит нормально, вижу на выходе модуляцию, потом все стопорится на while (CSL_FEXT(uppRegs->UPIS2, UPP_UPIS2_PEND)); Поднимается флажок UORI в UPISR. Не оч понял из ДШ, при каких условиях это может происходить, понял только, что на это влияет клок, но он в моем случае с большим запасом по сравнению с максимальными 75. Вообще, загнать uPP в underrun/overflow не так уж и просто. Как настроен приоритет в SYSCONF.MSTPRI0? Попробуйте переключить TXSIZE на 128 байт в регистре UPTCR. 2) По адресу recv_buffer память не меняется. И не должно: uPP к этому моменту уже отвалился с ошибкой. Есть OMAP-L137 и OMAP-L138. У 137-го отсутствует UPP (универсальный параллельный порт), но он привлекает более "снисходительным" корпусом BGA. Без UPP можно как то нормально подключить к данному камню параллельное ADC, где то так на 10-20MSPS? Или же всё таки лучше на 138-м остановиться с UPP. Лучше L138. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 31 июля, 2016 Опубликовано 31 июля, 2016 · Жалоба Без UPP можно как то нормально подключить к данному камню параллельное ADC, где то так на 10-20MSPS? Или же всё таки лучше на 138-м остановиться с UPP. Без проблем. У L-137 есть два PRU-ядра как раз и предназначенные для эмуляции недостающей периферии. Логичней всего задействовать одно из них. Я думаю - написать такой простой код для PRU не составит труда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Атмег 0 1 августа, 2016 Опубликовано 1 августа, 2016 · Жалоба Как настроен приоритет в SYSCONF.MSTPRI0? Там должно быть дефолтное знчение 4, я его не менял. На АРМе при этом у меня крутится linux, висит консоль по ssh. Но никаких тяжелых задач под linux не запущено. Попробуйте переключить TXSIZE на 128 байт в регистре UPTCR. Попробую, пока что не могу проверить - временно нет доступа к плате. И не должно: uPP к этому моменту уже отвалился с ошибкой. Я имел в виду до того момента, как отвалится. Несколько (~3) итераций у меня успевает пройти, я даже вижу модуляцию на выходе трансивера. Если убираю кусок кода на передачу, прием крутится бесконечно, не отваливается. Но в память ничего не пишется. Вопрос по аппаратной части: можно ли работать только с Enable, без Start и Wait, тут все нормально? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 1 августа, 2016 Опубликовано 1 августа, 2016 · Жалоба Вопрос по аппаратной части: можно ли работать только с Enable, без Start и Wait, тут все нормально? Да, можно без Start и Wait. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 22 августа, 2016 Опубликовано 22 августа, 2016 · Жалоба // Reset the module reg = uppRegs->UPPCR; CSL_FINST(reg, UPP_UPPCR_SWRST, RESET); i = 2000; while (--i); CSL_FINST(reg, UPP_UPPCR_SWRST, RUNNING); uppRegs->UPPCR = reg; Модуль здесь не ресетится, кстате... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Атмег 0 29 августа, 2016 Опубликовано 29 августа, 2016 · Жалоба reg = uppRegs->UPPCR; CSL_FINST(reg, UPP_UPPCR_SWRST, RESET); i = 2000; while (--i); reg = uppRegs->UPPCR; CSL_FINST(reg, UPP_UPPCR_SWRST, RUNNING); uppRegs->UPPCR = reg; так норм или еще что-то? платы нет все еще, не проверить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 29 августа, 2016 Опубликовано 29 августа, 2016 · Жалоба reg = uppRegs->UPPCR; CSL_FINST(reg, UPP_UPPCR_SWRST, RESET); i = 2000; while (--i); reg = uppRegs->UPPCR; CSL_FINST(reg, UPP_UPPCR_SWRST, RUNNING); uppRegs->UPPCR = reg; так норм или еще что-то? платы нет все еще, не проверить reg = uppRegs->UPPCR; CSL_FINST(reg, UPP_UPPCR_SWRST, RESET); uppRegs->UPPCR = reg; i = 2000; while (--i); reg = uppRegs->UPPCR; CSL_FINST(reg, UPP_UPPCR_SWRST, RUNNING); uppRegs->UPPCR = reg; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Атмег 0 29 августа, 2016 Опубликовано 29 августа, 2016 · Жалоба ой точно, спасибо) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться