Занимаюсь контроллером Si1000 в связке с IAR+C-Spy. Пробую запустить стек от производителя,однако столкнулся с проблемой, при инициализации работы стека вываливаюсь в ошибку fEZMacPRO_StateErrorEntered=1 и при выполнении функции EZMacPRO_Init() останавливаюсь на while (EZMacProReg.name.MSR != EZMAC_PRO_IDLE). Вывод NIRQ заведен Р0.1, на P1.7 и P2.0 светодиоды.
тактовую частоту завожу:
Код
OSCICN |= 0x80; //24,5MHz
CLKSEL = 0x00;
FLSCL = 0x40;
FLWR = 0x01;
/* Wait for clock to get ready. */
while(!(CLKSEL & 0x80));
CLKSEL = 0x00;
FLSCL = 0x40;
FLWR = 0x01;
/* Wait for clock to get ready. */
while(!(CLKSEL & 0x80));
Настройка портов следующая
Код
SBIT (SDN, SFR_P2, 5);
SBIT(NSS, SFR_P1, 3);
//////////
XBR1 |= 0x40; // Enable SPI1 (3 wire mode)
P1MDOUT |= 0x95; // SCK1, MOSI1, & NSS1,push-pull
SFRPAGE = CONFIG_PAGE;
P1DRV = 0x15; // MOSI1, SCK1, NSS1, high-current mode
SFRPAGE = LEGACY_PAGE;
SDN = 0;
XBR2 |= 0x40;
//SDN = 0;
NSS = 1;
P2MDOUT |= 0x41; // SDN P2.6 push-pull
P2DRV |= 0x40; // SDN P2.6 high-current mode
IT01CF = 0x01; // INT0 mapped to P0.1 active low
TCON &= ~0x03;
SBIT(NSS, SFR_P1, 3);
//////////
XBR1 |= 0x40; // Enable SPI1 (3 wire mode)
P1MDOUT |= 0x95; // SCK1, MOSI1, & NSS1,push-pull
SFRPAGE = CONFIG_PAGE;
P1DRV = 0x15; // MOSI1, SCK1, NSS1, high-current mode
SFRPAGE = LEGACY_PAGE;
SDN = 0;
XBR2 |= 0x40;
//SDN = 0;
NSS = 1;
P2MDOUT |= 0x41; // SDN P2.6 push-pull
P2DRV |= 0x40; // SDN P2.6 high-current mode
IT01CF = 0x01; // INT0 mapped to P0.1 active low
TCON &= ~0x03;
main.c и настройки стека. На шаге инициализации стека виснем в ошибке
Код
#define SYSCLK_HZ (24500000)
#define SYSCLK_KHZ (SYSCLK_HZ/1000)
#define FREQUENCY_BAND_868
#define TRANSCEIVER_OPERATION
#define FOUR_CHANNEL_IS_USED
#define EXTENDED_PACKET_FORMAT
#define PACKET_FORWARDING_SUPPORTED
PORT_Init ();
SystemClkInit();
Timer3Init();
LED1= false;
LED2= false;
StateMachine_Init();
while (1){
switch(DEMO_SR)
{
case /*DEMO_SR_STATE_BOOT_BIT*/0x10:
/* Initialise board. */
/* Enable global interrupts. */
ENABLE_GLOBAL_INTERRUPTS();
/* Initialise EZMacPRO. */
EZMacPRO_Init();
/* Wake up from Sleep.*/
EZMacPRO_Wake_Up();
#define SYSCLK_KHZ (SYSCLK_HZ/1000)
#define FREQUENCY_BAND_868
#define TRANSCEIVER_OPERATION
#define FOUR_CHANNEL_IS_USED
#define EXTENDED_PACKET_FORMAT
#define PACKET_FORWARDING_SUPPORTED
PORT_Init ();
SystemClkInit();
Timer3Init();
LED1= false;
LED2= false;
StateMachine_Init();
while (1){
switch(DEMO_SR)
{
case /*DEMO_SR_STATE_BOOT_BIT*/0x10:
/* Initialise board. */
/* Enable global interrupts. */
ENABLE_GLOBAL_INTERRUPTS();
/* Initialise EZMacPRO. */
EZMacPRO_Init();
/* Wake up from Sleep.*/
EZMacPRO_Wake_Up();