Chcę sobie otworzyć komunikację (na razie ultra prostą, po prostu aby zobaczyć czy bangla) z prockiem PicoBlaze zaimplementowanym w FPGA po RS232.
RSa mam na przejściówce USB->RS232, ale to nie ma raczej większego znaczenia. Do komunikacji ze strony kompa chcę użyć terminala Hercules, ale to też nie ma większego znaczenia raczej. Jako, że mam taktowanie 27 MHz na kwarcu, to zrobiłem sobie timer, który dzieli mi to przez 1875 i mamy baud 14400. PicoBlaze w ogóle nie posiada timera jako takiego, który by mu aktywował przerwania und stuff.
Ogółem zamierzenie jest takie aby procesur ręcznie obsługiwał cały sygnał. Nie ma żadnych UARTów czy innych narzędzi. Gołodupiec totalny, trzeba od zera w asemblerze. W każdym razie na ten moment chcę zrobić to w asemblerze (dla prezentacji), a potem sobie spróbuję dorobić osobny driver jako komponent w VHDLu, który będzie przetwarzał sobie sygnał na pełne 8 bitów i wypluwał w całości do procka jak się uzbiera, bo tak będzie po prostu lepiej.
Mamy RXD, TXD no i CTS oraz RTS z sygnałów. I teraz zastanawiam się jak on to widzi i jak się do tego zabrać. Czy np. odpalać przerwanie przez CTS, czy w ogóle bez handshake'a to zrobić? Mam gołodupca, czyli muszę najpierw wykrywać pierwszy bit (który jak rozumiem będzie logiczną 1 po wyjściu z drivera jako, że mamy w logice ujemnej 1 na RSie) i bit po bicie przesuwać i ładować ramkę danych.
Ale ale jest jeden problem. Każda instrukcja w PicoBlaze trwa przez dwa takty zegarowe. I zastanawiam się czy to jest w ogóle możliwe zrobić to ręcznie na procesorze, czy muszę jednak zrobić sobie specjalny układ cyfrowy?
Na razie ten schemat jest niepodłączony w ogóle do komunikacji. Sprawdzałem tylko, czy mi dzielnik działa.
@aloalo83: No jest pewien problem tutaj tego typu, że trzeb DOKŁADNIE wiedzieć jak się to gunwo zachowuje w środku. W zwykłym mirkokontrolerze łączysz się z USARTem, dostosowujesz timer na odpowiedniego bauda i masz z głowy. A tutaj jest gołodupiec i dumaj teraz jak to poprawnie skomunikować.
Teraz jeszcze jest pytanie -> czy jak jest tam ten przetwornik RS232, to on mi usuwa bity startu i stopu, czy wywala z siebie 10 bitowe ramki? Bo teraz w sumie nie wiem też jak to potraktować. Czy ten układ komunikacyjny musi mi tylko sekwencyjnie przetwarzać sygnał seryjny na wektor, czy jeszcze bity stopu i startu wywalać?
10 lat temu Rosjanie mieli jeszcze pozytywny stosunek do Polaków i tutaj nawet nazwali Polaka bratem. Później wszystko się zepsuło przez politykę zachodu względem Ukrainy. #wojna #ukraina #rosja #polska #polityka
Chcę sobie otworzyć komunikację (na razie ultra prostą, po prostu aby zobaczyć czy bangla) z prockiem PicoBlaze zaimplementowanym w FPGA po RS232.
RSa mam na przejściówce USB->RS232, ale to nie ma raczej większego znaczenia. Do komunikacji ze strony kompa chcę użyć terminala Hercules, ale to też nie ma większego znaczenia raczej. Jako, że mam taktowanie 27 MHz na kwarcu, to zrobiłem sobie timer, który dzieli mi to przez 1875 i mamy baud 14400. PicoBlaze w ogóle nie posiada timera jako takiego, który by mu aktywował przerwania und stuff.
Ogółem zamierzenie jest takie aby procesur ręcznie obsługiwał cały sygnał. Nie ma żadnych UARTów czy innych narzędzi. Gołodupiec totalny, trzeba od zera w asemblerze. W każdym razie na ten moment chcę zrobić to w asemblerze (dla prezentacji), a potem sobie spróbuję dorobić osobny driver jako komponent w VHDLu, który będzie przetwarzał sobie sygnał na pełne 8 bitów i wypluwał w całości do procka jak się uzbiera, bo tak będzie po prostu lepiej.
Driver do RSa w tej płytce jest takowy: http://www.analog.com/static/imported-files/data_sheets/ADM3232E.pdf
Mamy RXD, TXD no i CTS oraz RTS z sygnałów. I teraz zastanawiam się jak on to widzi i jak się do tego zabrać. Czy np. odpalać przerwanie przez CTS, czy w ogóle bez handshake'a to zrobić? Mam gołodupca, czyli muszę najpierw wykrywać pierwszy bit (który jak rozumiem będzie logiczną 1 po wyjściu z drivera jako, że mamy w logice ujemnej 1 na RSie) i bit po bicie przesuwać i ładować ramkę danych.
Ale ale jest jeden problem. Każda instrukcja w PicoBlaze trwa przez dwa takty zegarowe. I zastanawiam się czy to jest w ogóle możliwe zrobić to ręcznie na procesorze, czy muszę jednak zrobić sobie specjalny układ cyfrowy?
Na razie ten schemat jest niepodłączony w ogóle do komunikacji. Sprawdzałem tylko, czy mi dzielnik działa.
źródło: comment_l4M26OXImR0wH70eAO4GDziBrxQe8h6V.jpg
Pobierz