juvf 24 October 10, 2012 Posted October 10, 2012 · Report post Как бы организовать умный уарт для ниоса? нужен уарт, который бы принимал данные и по ДМА складывал бы их в определённое место в озу. как только после последнего принятого байта пройдет определённое время, уарт должен генерировать прерывание. А при передаче хотелось бы загрузить пакет в озу и "дернуть старт". данные из озу по дма сами ми бы переправлялись в уарт. после передачи всего пакета уарт (или дма) генерировал бы прерывание или снимал бы флаг бизи. Ну до кучи можно аппаратно управлять внешним драйвером ~RE/TE. Есть мысли написать свой модуль уарт и посадить его на шину авалон. Только с чего начинать? как свои подобные модули делать? в QSys нужно добавить какойто контроллер авалон и на него цеплять свой модуль? Или сразу свой модуль писать с авалон-слейвом? Quote Share this post Link to post Share on other sites More sharing options...
barabek 0 October 10, 2012 Posted October 10, 2012 · Report post Как бы организовать умный уарт для ниоса? нужен уарт, который бы принимал данные и по ДМА складывал бы их в определённое место в озу. как только после последнего принятого байта пройдет определённое время, уарт должен генерировать прерывание. А при передаче хотелось бы загрузить пакет в озу и "дернуть старт". данные из озу по дма сами ми бы переправлялись в уарт. после передачи всего пакета уарт (или дма) генерировал бы прерывание или снимал бы флаг бизи. Ну до кучи можно аппаратно управлять внешним драйвером ~RE/TE. Есть мысли написать свой модуль уарт и посадить его на шину авалон. Только с чего начинать? как свои подобные модули делать? в QSys нужно добавить какойто контроллер авалон и на него цеплять свой модуль? Или сразу свой модуль писать с авалон-слейвом? Я так и делал. Во вложении для примера мой UART. Только я делал его под свои нужды. У него прерывания на прием (и на передачу) выставляются по определенному терминирующему байту, а не по паузе между байтами. На передачу ДМА нет. И управление CTS (на передачу. Я что-то подзабыл, с названиями могу попутать, но функционал этих хэндшейков правильно пишу) автоматическое, а RTS (на прием) только программное. Но на приеме ДМА организован как кольцевой буфер. Для меня это было важно. Да и безопасно. В общем, не совсем то что ищете, но в качестве примера. Тестбенч, как всегда, лоховской :), доки тоже нет. Описание всех регистров в инкулуд-файле. Там, вобщем-то вся логика из описания регистров будет понятна. Оберточных файла два. С ДМА и без. Не понял как делать один общий с параметрами если меняется количество интерфейсов. Скорее всего никак. Ну и за английский не пинайте :) UART.rar Quote Share this post Link to post Share on other sites More sharing options...
juvf 24 October 14, 2012 Posted October 14, 2012 · Report post Только я делал его под свои нужды.у меня валяется какаято корка fifoed_avalon_uart "FIFOed UART (RS-232 serial port)9.3" v9.3, с опенкорс качал. Вроде все ваши нужды покрывает. Посмотрел вашу реализацию.... Не совсем понятно как это иинтегрируется в SOPC? Как этот уарт внедрить в NIOS? Начал свою реализачию делать через *_hw.tcl. Вопрос возник. У вас 2 шины, у меня 1. Сделал шину Avalon-MM slave. Её подключил к ядру ниоса и её же подключил к DMA. Воде авалон позволяет двух мастеров на шине иметь и колизии автоматом разруливаются. Будет так работать или обязятельно для кантроля нужна одна шина, а для DMA отдельная? Quote Share this post Link to post Share on other sites More sharing options...
barabek 0 October 14, 2012 Posted October 14, 2012 · Report post Посмотрел вашу реализацию.... Не совсем понятно как это иинтегрируется в SOPC? Как этот уарт внедрить в NIOS? Как обычно это и делается. В SOPC выполняете команду "new component" (ЕМНИП). Выбираете головной файл, у меня это один из обертоных файлов. Ну а далее можно догадаться по пунктам, ну и мануал по созданию своего компонета в помощь. Или не в этом вопрос? Начал свою реализачию делать через *_hw.tcl. Вопрос возник. У вас 2 шины, у меня 1. Сделал шину Avalon-MM slave. Её подключил к ядру ниоса и её же подключил к DMA. Воде авалон позволяет двух мастеров на шине иметь и колизии автоматом разруливаются. Будет так работать или обязятельно для кантроля нужна одна шина, а для DMA отдельная? Будет работать и так. Там арбитраж реализован. А то что у меня две шины - так у меня же DMA внутри. Соответственно он обязан иметь мастера. Если Вы используете внешний DMA, то получите тоже самое, почти. Quote Share this post Link to post Share on other sites More sharing options...