Több IRQ, több USART

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
poeri
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2006. október 20. péntek, 6:00

Több IRQ, több USART

Hozzászólás Szerző: poeri »

Kedves AVR tudók!

Hagy szükségem volna tapasztalatotokra a következő problémámban:
Jelenleg igy sorosportolok:
Rec_isr: ' Soros fogadás
Incr U0bc 'increase buffer counter
If Udr = 10 Or Udr = 13 Then
Com0 = "S1:" + U0buf '
U0bc = 0
U0buf = ""
Else
U0buf = U0buf + Chr(udr) 'add to buffer
Chart(u0bc) = Udr
End If
Return

Nagy problémám van ezzel mert mega64 és mega1280-at használva szeretnék több soros forrást figyelni, és ha helyzet van azt lekezelni. Tehát hardveres, tehát IRQ. De arra hogy hivatkozom? A Bascomban csak A (mintha csak egy lehetne) soros olvasást találtam, de ha több USART van a chipben? :?:

Segítségeteket előre is köszönöm!
poeri
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Soros port több darab esetén a következő tipem van:

Ischarwaiting() függvény az egyes portok figyelésére. Ha értéke =1 akkor valami van a bufferban.

Ha INT alapon kell, akkor az RXCnA illetve RXCnB regiszterek változására történjen IT.

Illetve receivekor megnézed melyik jelzőbit van bebillenve (ugynaaz mint az ischarwaiting függvény:), ahhoz tartozik a vett adat....
.


Bascomban ott a több port kezelése. Lsd a samples könvytát-serial, RS232bufferout.bas mintáját....

Kód: Egész kijelölése

Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Com2 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0


'setup to use a serial output buffer
'and reserve 20 bytes for the buffer
Config Serialout1 = Buffered , Size = 20
Open "Com1:" For Binary As #1

'It is important since UDRE interrupt is used that you enable the interrupts
Enable Interrupts
Print #1 , "Hello world"
Do
 Wait 1
 'notice that using the UDRE interrupt will slown down execution of waiting loops like waitms
 Print #1 , "test"
Loop
End


Close #1

Itt Open COM1 illetve Open COM0 utasításokkal nyitod meg az egyes portokat....
Avatar
poeri
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2006. október 20. péntek, 6:00

Hozzászólás Szerző: poeri »

Kedves Robert!

Köszönöm a segítséget!

Amikor ezt a részt olvastam a helpben nem fogtam fel. hogy ez hardos portokhoz is jo (open as bnary) valamiért úgy tudatosult bennem, hogy ha Open, akkor software...

Mindenesetre kipróbáltam és ragyogóan megy a pufferelt módszer.

Jól gondolom, hogy a Bascom függvénye Ischrawaiting() ugyan úgy interruptokkal beszélget csak történetesen Ő intézi el a pufferbe pakolást és nem én megszakításrutinbol?

Poeri
poeri
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Az Ischarwaiting az nem megszakitast nez. Hanem hogy a USR (?) regiszterben van-e valami, illetve meg egy regiszter az amiazt jelzi, hogy adat erkezett. Ezt a ket helyet nezi meg, es igy ad vissza 1 v. 0-t.

A mukodese nem IT alapon megy! (interruptrutinban is mukodik ezert....)

Az Ischarwaiting az vétel alapú.
A buffer az lehet adas ill vetel is... Ez viszont mar lehet IT alapon...
Válasz küldése