Вчера заметил один глюк... (IAR MCS-51 V7.51)
Собрал проект, скомпилил, попробовал в симуляторе все вроде нормально. (галка стояла на оптимизации Low)
Прошиваю чип... не работает...
Должен раз в секунду мигать светодиодом по команде запуска, проверял генераторы, так как встроенный часовой RC генератор давал ощутимую погрешность, а имеется необходимость достаточно точно время отсчитывать. А иначе получится несогласование работы передатчиков.
Поставил галку на None...
Скомпилил, попробовал в симуляторе все вроде норм. Прошиваю чип не работает.
Поставил галку на Medium...
Скомпилил, попробовал в симуляторе все вроде норм. Прошиваю чип работает.
Поставил галку на High (Balanced)...
Скомпилил, попробовал в симуляторе все вроде норм. Прошиваю чип работает.
Код
#include "ionRF24LE1.h"
#include "rf_transceiver.h"
void delay(unsigned int j) {while (--j > 0);}
const unsigned char address[5] = {0xC3, 0xC3, 0xC3, 0xC3, 0xC3};
unsigned char buffer[5];
void main()
{
unsigned char i;
//------------------------------------------------------------------------------
DIS_RF;
//---CONFIG---------------------------------------------------------------------
rf_power_down();
rf_crc_mode(CRC_8BIT); //CRC 8 бит
rf_dis_irq(ALL_IRQ); //Выключаем все прерывания
rf_en_irq(RX_DR); //Включаем прерывание по приему
rf_prx_mode(); //устанавливаем приоритетный режим передачи данных
//---EN_AA----------------------------------------------------------------------
rf_dis_aa(ALL_PIPE); //выключаем Enhanced ShockBurst для всех каналов
//---EN_RXADDR------------------------------------------------------------------
rf_dis_rxaddr(ALL_PIPE); //выключаем адреса для всех каналов
rf_en_rxaddr(PIPE_0); //включаем адрес для канала 0
//---SETUP_AW-------------------------------------------------------------------
rf_setup_aw(AW_5BYTES); //устанавливаем ширину адреса в 5 байт
//---SETUP_RETR-----------------------------------------------------------------
rf_write_reg(SETUP_RETR, 0x00); //устанавливаем счетчик авторетрансляции в 0
//---RF_CH----------------------------------------------------------------------
rf_set_channel(0x3); //устанавливаем частотный канал 3
//---RF_SETUP-------------------------------------------------------------------
rf_set_rate(RATE_250KBPS); //устанавливаем битрейт 250 кбит/с
//------------------------------------------------------------------------------
i = 5;
while (i--) buffer[i] = address[i];
rf_write_multibyte_reg(RX_ADDR_P0, buffer, 5); //устанавливаем адрес канала 0 для приема
//---RX_PW_P0-------------------------------------------------------------------
rf_write_reg(RX_PW_P0, 4); //устанавливаем фиксированное число байт приема канала 0
//---DYNPD----------------------------------------------------------------------
rf_dis_dynpd(ALL_PIPE); //выключаем динамическую длинну данных для всех каналов
//---FEATURE--------------------------------------------------------------------
rf_write_reg(FEATURE, 0x00); //выключаем все прочие функции
//---CONFIG---------------------------------------------------------------------
rf_power_up(); //переводим в режим stantby-I
delay (200);
//RTC2CON = Comp_res | RTC2_en;
IEN1 = RF_int | Tick_int; //прерывание от RF
T2CON = 0;
IEN0 = En_all_int;
EN_RF;
//------------------------------------------------------------------------------
while(1);
}
Опытным путем установил что чип останавливается или уходит в ребут или в бесконечном цикле на
Код
i = 5;
while (i--) buffer[i] = address[i];
или
Код
rf_write_multibyte_reg(RX_ADDR_P0, buffer, 5);
Сообщение отредактировал shrek - Sep 1 2010, 04:09