Код
#include <include.h>
volatile BASIC_RF_SETTINGS rfSettings;
// void basicRfInit(BASIC_RF_RX_INFO *pRRI, UINT8 channel, WORD panId, WORD myAddr)
void basicRfInit(BASIC_RF_RX_INFO *pRRI, UINT8 channel, WORD panId, WORD myAddr) {
UINT8 n;
// Make sure that the voltage regulator is on, and that the reset pin is inactive
SET_VREG_ACTIVE();
halWait(1000);
SET_RESET_ACTIVE();
halWait(1);
SET_RESET_INACTIVE();
halWait(5);
// Initialize the FIFOP external interrupt
FIFOP_INT_INIT();
ENABLE_FIFOP_INT();
// Turn off all interrupts while we're accessing the CC2420 registers
DISABLE_GLOBAL_INT();
// Register modifications
FASTSPI_STROBE(CC2420_SXOSCON);
FASTSPI_SETREG(CC2420_MDMCTRL0, 0x0AF2); // Turn on automatic packet acknowledgment
FASTSPI_SETREG(CC2420_MDMCTRL1, 0x0500); // Set the correlation threshold = 20
FASTSPI_SETREG(CC2420_IOCFG0, 0x007F); // Set the FIFOP threshold to maximum
FASTSPI_SETREG(CC2420_SECCTRL0, 0x01C4); // Turn off "Security enable"
// Set the RF channel
halRfSetChannel(channel);
// Turn interrupts back on
ENABLE_GLOBAL_INT();
// Set the protocol configuration
rfSettings.pRxInfo = pRRI;
rfSettings.panId = panId;
rfSettings.myAddr = myAddr;
rfSettings.txSeqNumber = 0;
rfSettings.receiveOn = FALSE;
// Wait for the crystal oscillator to become stable
halRfWaitForCrystalOscillator();
// Write the short address and the PAN ID to the CC2420 RAM (requires that the XOSC is on and stable)
DISABLE_GLOBAL_INT();
FASTSPI_WRITE_RAM_LE(&myAddr, CC2420RAM_SHORTADDR, 2, n);
FASTSPI_WRITE_RAM_LE(&panId, CC2420RAM_PANID, 2, n);
ENABLE_GLOBAL_INT();
} // basicRfInit
Соответсвенно косяк происходит с функциями halWait(), halRfSetChannel(), ну и наверное со всеми функциями в проекте, я просто больше пока не проверил эти функции находятся в отдельных файлах, вот к примеру halWait():
Код
#include <include.h>
//-------------------------------------------------------------------------------------------------------
// void halWait(UINT16 timeout)
void halWait(UINT16 timeout) {
// This sequence uses exactly 8 clock cycle for each round
do {
NOP();
NOP();
NOP();
NOP();
} while (--timeout);
} // halWait
Кстати такой же косяк происходит со структурой rfSettings, виснет на операции присваивания, просто может я чето в Makefile не так пишу. Если надо Makefile приложу=). Со стеком по идее проблем быть не должно, функций не так много, если только в gcc это как то регулируется.