مشکل با وقفه spi در بسکام
برنامه زیر مربوط به master و slave یک ارتباط spi هست . زمانی که برنامه رو بدون وقفه مینویسم همه چی درست کار میکنه ولی زمانیکه از وقفه استفاده می کنم برنامه مشکل دار میشه
وقتی اینتراپت ها رو غیر فعال میکنم مدار درست میشمره
وقتی فقط اینتراپت master رو فعال میکنم باز هم مدار درست میشمره
اما وقتی اینتراپت slave رو فعال میکنم یا هر دو اینتراپت رو فعال میکنم مدار یکی در میون میشمره و بعضی وقتها هم در شمردن پرش زیادی میکنه
توضیح برنامه :
میکروکنترلر (atmega32) مستر اطلاعات مربوط به یک شمارنده یک بایتی را به میکروکنترلر اسلیو (atmega32) ارسال میکند و اسلیو آنرا روی پورت d نمایش میدهد
توضیح سخت افزار :
پایه های mosi, miso , skc, ss متناظرا به هم وصل هستند و تغذیه دو میکروکنترلر مشترک است و به پایه های پورت d اسلیو تعداد 8 عدد led متصل است.
برنامه master
کد:
$regfile = "m32def.dat"
$crystal = 8000000
Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 128 , Noss = 0
Spiinit
Enable Interrupts
Enable Spi
On Spi Spi_master
Dim A As Byte
A = 0
Do
Waitms 200
Spiout A , 1
Loop
End
Spi_master:
Incr A
Return
برنامه slave
کد:
$regfile = "m32def.dat"
$crystal = 8000000
Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = No , Polarity = High , Phase = 0 , Clockrate = 128 , Noss = 0
Spiinit
Enable Interrupts
Enable Spi
On Spi Spi_slave
Dim A As Byte
Config Portd = Output
Do : Loop
End
Spi_slave:
Spiin A , 1
Portd = A
Return