Mam kod do obsługi 86rf230 ver.A, czy ktoś mógłby pomóc wprowadzić zmiany by program był kompatybilny z układem rf230 ver.B. Oba układy były stosowane w modułach Messhneticsa ZDM-A1281 (ver.A), ATZB-A24-UFLR (ver.B).
Według dokumentacji nastąpiła zmiana w obsłudze SPI (MOSI) "SPI Interface: MISO pin is updated on falling edge at pin SCLK" ale ja mogę zapisywać i odczytywać rejestry w rf230 więc ISP działa chyba prawidłowo. Dlatego proszę o pomoc w poprawieniu kodu żeby działał z rev.B.
#include <avr/io.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include "rf.h"
#include "spi.h"
#define BUFSIZE 272
#define TRXBUFSIZE 128
unsigned char state;
unsigned char receiveinprogres;
rx_frame_t rx_frame;
unsigned char transmitInProgress;
#define CMDTRX_TX_START 0x02
#define CMDTRX_FORCE_TRX_OFF 0x03
#define CMDTRX_RX_ON 0x06
#define CMDTRX_TRX_OFF 0x08
#define CMDTRX_PLL_ON 0x09
void sleep() {
int i;
for(i=0;i<2000;i++) {
asm("nop");
}
}
void initRF() {
PORTA &= ~(1<<7);
sleep();
sleep();
sleep();
sleep();
PORTA |= (1<<7);
sleep();
sleep();
sleep();
sleep();
receiveinprogres = 0;
transmitInProgress = 0;
writeRegister(2,CMDTRX_FORCE_TRX_OFF);
sleep();
writeRegister(2,CMDTRX_TRX_OFF);
sleep();
writeRegister(2,CMDTRX_RX_ON);
sleep();
setChannel(0x14);
}
unsigned char getChannel() {
unsigned char resuult;
resuult = readRegister(8);
return (resuult&0x1f);
}
void setChannel(unsigned char channel) {
writeRegister(8,(0x20|(channel &0x1f)));
}
int sendFrame(unsigned char* frame) {
unsigned char reg;
unsigned char bufbin[BUFSIZE];
int sizebufbin;
int counter;
counter = 0;
while(1) {
reg = readRegister(2);
if (reg == CMDTRX_RX_ON)
break;
if (reg == CMDTRX_TRX_OFF)
break;
sleep();
counter++;
if (counter>200)
return 0;
}
counter = 0;
writeRegister(2,CMDTRX_PLL_ON);
while(1) {
reg = readRegister(2);
if (reg != CMDTRX_PLL_ON) {
counter++;
if (counter>200)
return 0;
sleep();
writeRegister(2,CMDTRX_PLL_ON);
}
else
break;
}
sizebufbin = strlen(frame) / 2;
if (sizebufbin<=TRXBUFSIZE) {
ascii_to_byte(frame,sizebufbin,bufbin);
//frame_write(frame,strlen(frame));
frame_write(bufbin,sizebufbin);
sleep();
writeRegister(2,CMDTRX_TX_START);
transmitInProgress = 1;
}
return 0;
}
void stepRF() {
unsigned char output[BUFSIZE];
unsigned char payload[BUFSIZE];
unsigned char reg;
state = readRegister(0x0f);
if (state!=0) {
sprintf(output,"state(%2x)\r\n",state);
uart_putstr(1,output);
if (transmitInProgress) {
if ((state & 0x08)!=0) {
transmitInProgress = 0;
writeRegister(2,CMDTRX_RX_ON);
}
}
else {
if ((state & 0x04)!=0) {
receiveinprogres = 1;
}
if (((state & 0x08)!=0)&&(receiveinprogres)) {
// frame odebrany
receiveinprogres = 0;
frame_read(&rx_frame);
if (rx_frame.length < TRXBUFSIZE)
rx_frame.data[rx_frame.length] = 0;
else {
rx_frame.data[0] = 0;
}
reg = readRegister(7);
if (rx_frame.length < TRXBUFSIZE) {
byte_to_ascii(rx_frame.data,payload,rx_frame.length);
//sprintf(output,"read(%2x,%2x):%s\r\n",rx_frame.length,reg,rx_frame.data);
sprintf(output,"read(%2x,%2x):%s\r\n",rx_frame.length*2,reg,payload);
uart_putstr(1,output);
}
}
}
}
}
Według dokumentacji nastąpiła zmiana w obsłudze SPI (MOSI) "SPI Interface: MISO pin is updated on falling edge at pin SCLK" ale ja mogę zapisywać i odczytywać rejestry w rf230 więc ISP działa chyba prawidłowo. Dlatego proszę o pomoc w poprawieniu kodu żeby działał z rev.B.