Я работаю над проектом, включающим LPC4370 MCU (LPC Link 2 eval Board) и Matlab.Мне нужно, чтобы мой встроенный код был реконфигурируемым пользователем из matlab: пользователь отправляет команду, mcu отвечает.
Я использую LPCOpen VCOM в качестве базы: он использует USB спрерывание.
Мой код C:
static uint8_t g_rxBuff[256];
[...]
while (1)
{
/* Sleep until next IRQ happens */
__WFI();
/* Read cmd */
rdCnt = vcom_bread(&g_rxBuff, 1);
state = (char)g_rxBuff;
if(rdCnt == 1)
{
switch (state)
{
case 'a':
/* cmd ackn */
vcom_write((uint8_t*)&g_rxBuff, 1);
case 'b':
/* cmd ackn */
vcom_write((uint8_t*)&g_rxBuff, 1);
case 'c':
/* cmd ackn */
vcom_write((uint8_t*)&g_rxBuff, 1);
}
}
}
Здесь я жду команду, а затем пытаюсь вернуть ее обратно на хост (т.е. ackn).
В Matlab
BaudRate=115200;
serial_object=0;
delete(instrfind('Type','serial'));
serialInfo = instrhwinfo('serial');
serial_object=serial('/dev /ttyACM1','BaudRate',BaudRate,'InputBufferSize',4*4096,'OutputBufferSize',4*4096);
fopen(serial_object);
sendCmd(serial_object,'a');
sendCmd(serial_object,'b');
sendCmd(serial_object,'c');
Где
function ret = sendCmd(serial_object, cmd_sent)
fwrite(serial_object, cmd_sent, 'char');
cmd_read = fread(serial_object, 1, 'char');
if (~isempty(cmd_read) && (cmd_read == cmd_sent))
disp(strcat('SENT: ', cmd_sent));
else
disp(strcat('ERROR: ', cmd_sent));
end
end
Так что в принципе это никогда не работает.Я всегда получаю сообщения об ошибках типа:
Предупреждение. Указанный объем данных не был возвращен в течение периода ожидания. «Сериал» не может прочитать какие-либо данные.Для получения дополнительной информации о возможных причинах см. Предупреждения о последовательном чтении.
Поскольку я некоторое время работал над этим, я могу сказать, что с настройкой порта все в порядке, мне удалось вывести данные из mcu с той же конфигурацией.
Так что я думаю, что мне здесь не хватает практических рекомендаций.Единственное допущение, которое я сделал, заключается в том, что USB IRQ срабатывает каждый раз, когда Matlab пишет в mcu.
РЕДАКТИРОВАТЬ: некоторые данные отладки SWD.IRQ вызывает после 1 команды fwrite от Matlab:
Эти контрольные точки никогда не достигаются