Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
общая идея протокола такая:
символ синхронизации 0x2B
тело сообщения , всмысле сами команды - описаны в доке от Freescale
CRC - считается как
[CODE]
unsigned char crc_MC3PHAC(unsigned char * payload, unsigned char len){
unsigned char crc;
if (len == 0) return 0;
crc = 0
do{
crc += *payload++;
len--
}while(len);
return (256 - crc);
}
[/CODE]
в результате может выглядеть примерно так
[CODE]
const unsigned char cmd_RESET = {0xE3, 0x10, 0x00, 0x30, 0x00};
void MC3PHAC_reset(void){
MC3PHAC_message_send(cmd_RESET, sizeof(cmd_RESET));
}
unsigned char cmd_FREQ_PWM = {0xE3, 0x10, 0x00, 0x41};
int MC3PHAC_set_freq( unsigned char freq){
if((freq == 41)||(freq == 42)||(freq == 44)||(freq == 48)){
cmd_FREQ_PWM[3] = freq;
MC3PHAC_message_send(cmd_FREQ_PWM, sizeof(cmd_FREQ_PWM))
return (0);
}else return (-1);
}
void foo(void){
MC3PHAC_reset();
MC3PHAC_set_freq(48);
}
void MC3PHAC_message_send(unsigned char * msg, unsigned char len){
unsigned char crc = 0;
const unsigned char START_SYMBOL = 0x2B;
putchar(START_SYMBOL);
while(len){
putchar(*msg);
crc += *msg++;
len--;
}
putchar((unsigned char)(256-crc));
}
[/CODE]
Ссылка: http://www.freescale.com/files/microcontrollers/doc/data_sheet/MC3PHAC.pdf
Составить ответ | Вернуться на конференцию
Ответы