Witam,
Przejdę od razu do rzeczy. Mam problem ze skompilowaniem poniższego kodu w WinAVR. Całość jest w C, jedynie jeden plik, zważywszy na zależności czasowe, pisany jest w asemblerze. Oto problematyczny kawałek:
Kompilator wyrzuca błąd w zaznaczonych liniach.
Pogooglałem trochę i okazuje się, że adresy rejestrów specjalnych muszą mieć wartość mniejszą niż 32 (0x20), żeby WinAVR to 'łyknął'.
Problem polega na tym, że inżynierowie z Atmela trochę poszaleli przy projektowaniu mega644 i rejstr SPCR znajduje się pod adresem 0x2C, natomiast SPSR - 0x2D. Jak zmusić WinAVR do skompilowania powyższego kodu?
Dodam, że wygooglana definicja znajduje się na początku pliku.
Jak zatem skompilować kod, który jest nawet podany w datasheecie do tego µC w WinAVR?
Pozdrawiam
Przejdę od razu do rzeczy. Mam problem ze skompilowaniem poniższego kodu w WinAVR. Całość jest w C, jedynie jeden plik, zważywszy na zależności czasowe, pisany jest w asemblerze. Oto problematyczny kawałek:
SPI_SEND: ;<--
sbi SPCR,SPE ;enable SPI
out SPDR,r24 ;load byte in SPI data register
SPI_SEND_0:
sbis SPSR,SPIF ;<--
rjmp SPI_SEND_0 ;transmitt byte to LCD
in r0,SPDR
sbi PORTB,LCD_CS ;deselect Display
retKompilator wyrzuca błąd
Error: number must be positive and less than 32Pogooglałem trochę i okazuje się, że adresy rejestrów specjalnych muszą mieć wartość mniejszą niż 32 (0x20), żeby WinAVR to 'łyknął'.
Problem polega na tym, że inżynierowie z Atmela trochę poszaleli przy projektowaniu mega644 i rejstr SPCR znajduje się pod adresem 0x2C, natomiast SPSR - 0x2D. Jak zmusić WinAVR do skompilowania powyższego kodu?
Dodam, że wygooglana definicja
#define __SFR_OFFSET 0Jak zatem skompilować kod, który jest nawet podany w datasheecie do tego µC w WinAVR?
Pozdrawiam
