[an error occurred while processing this directive]
|
Хотел написать моргалку светодиодом для AT91SAM7S64-EK на ИАРе. Типа загрузить её в ОЗУ и передать ей управление - пусть порезвится. Нифига.
Во-первых не смог добиться, что-бы компилятор поместил функцию по желаемому адресу. Соответственно, результаты компиляции разительно отличаются от видимого в окошке дизассемблера при отладке. Коды, с которых начинается функция идут где-то с адреса 0x013C.
В настройках линкера написал генерацию файлов "debug(ubrof)" и "raw-binary", ИксЦеэЛь так поправил (с расчётом, чего осталось свободно от самбы):
-Z(CONST)INTRAMSTART_REMAP=00202000
-Z(CONST)INTRAMEND_REMAP=00203FFF
-DRAMSTART=00202000
-DRAMEND=002003FFF
А сам текст - такой:
#include "AT91SAM7S64.h"
#include "Board.h"__ramfunc void main(void)
{
unsigned int i;
AT91PS_PMC pPMC = AT91C_BASE_PMC; //Pointer to PMC reg's structure
pPMC->PMC_PCER |= 0x4; //PIOA clock enable
AT91PS_PIO pPIO = AT91C_BASE_PIOA; //Pointer to PIOA reg's structure
pPIO->PIO_PER |= LED1;// LED1 controlled by PIO
pPIO->PIO_OER |= LED1;// LED1 - output
AT91PS_RTTC pRTTC = AT91C_BASE_RTTC; //Pointer to RTTC reg's structure
pRTTC->RTTC_RTMR = 0x8000; //Preload RTT divider
pRTTC->RTTC_RTMR |= AT91C_RTTC_RTTRST; //Clr and start RTTwhile ((pPIO->PIO_PDSR & SW4_MASK) != 0)
{
i = pRTTC->RTTC_RTVR;
if (i & 0x1 == 1)
{
pPIO->PIO_CODR &= 0xFFFFFFFE;
pPIO->PIO_SODR |= 0x1;
}
else
{
pPIO->PIO_SODR &= 0xFFFFFFFE;
pPIO->PIO_CODR |= 0x1;
};
};
}
Покритикуйте конструктивно. А то уж думаю плюнуть и достать из загашника АВРки и ихнюю студию...
E-mail: info@telesys.ru