![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
vesago
-
Постов
747 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные vesago
-
-
Наверное по SPI с данным чипом вам трудно будет выжать крутую скорость. Мегагерц 8 в среднем порядок если память не изменяет.
-
Я в слике только пишу. Компилирую и отлаживаю в родной иде. Мне так показалось удобно. В большинстве случаев отладка в соответсвующей иде вне конкуренции. А вот писанина в слике в свою очередь вне конкуренции. Особенно, если проект не маленький.
-
Вот вам коммутатор RS-232. Но в вашем случае, как правильно сказано выше, вполне можно обойтись LVCT125. Сразу два зайца убиваете - коммутируете + согласуете уровни 5В меги с GSM и GPS. Можно конечно еще прикрутить микросхему уарт, но имхо не бюджетно.
-
IAR + SlickEdit + JTAG(DW).
-
Я пишу в слике под Iar и Keil. Не стал гемориться с интеграцией - пишу в слике, отлаживаю в соответсвующих средах. Дискомфорта не испытываю. В общем это дело вкуса - как вам удобно так и делайте.
-
Коллега положительно отзывался об OpenTCP ppp неплохой есть в сырцах к книге TCP-IP Lean--Web Servers for Embedded Systems (2nd Ed.), что лежит на фтп.
-
Полудуплексный это понятно. Я пользую алм485 и во всех устройствах сажу пин разрешения приема на землю. Получается приемник всегда активирован.
-
Действительно ли в конце происходит прерывание и из приемника принимается 0? Может софтовый указатель сбился. Имхо 0 в конце похож на результат пустого прерывания - допустим после последнего не почистился буфер. Еще как вариант - если у вас драйвер 485 постоянно на приеме, может быть результатом приема передаваемых данных. Мне не удалось при передаче избежать приема эха. Т.к. к прибору подключается или 485 или 232 пришлось решить радикально - при передаче переключал пинсел приемника на гпио.
-
Спасибо, как-то я не подумал про такое. Еще увидел интересное решение - пинсел переключается.
-
К LPC2214 подключена ADM485 у которой приемник постоянно включен. Т.е. при передаче я отключаю прерывание приемника, включаю разрешение пердачи ADM485 и передаю данные. Далее контролирую опустошение передатчика UART и сдвигового регистра и при фиксации сего, чищу фифо и активирую прерывание приемника. Проблема в том, что сразу после передчи и разрешения прерывания приемника, происходит прерывание и принимается переданный байт, не смотря на то, что я почистил фифо. Получается, фифо не всегда чистится или при каких-то условиях прерывание остается взведенным. Если под отладкой выполнять по шагам, такого не происходит. Помогите разобраться с данной ситуацией. Параметры уарта - скорость 38400, глубина фифо - 1 байт, остальное стандартно.
Вот такой у меня иср уарта:
//******************************************************************************** ********** //Обработчик прерывания UART0 //******************************************************************** ********************** void UART0_Handler(void) __irq { u8_t data; u8_t tmphead; u8_t tmptail; switch((data = U0IIR) & INTERRUPT_SOURCE_MASK) { //Прием case SOURCE_RX: data = U0RBR; if((uart0.flags & (1<<UART0_FLAG_TX_IN_PROGRESS)) == 0) { tmphead = (uart0.rx_head + 1) & UART0_RX_BUFFER_MASK; uart0.rx_head = tmphead; if(tmphead == uart0.rx_tail) { //ERROR! Receive buffer overflow uart0.flags |= (1<<UART0_FLAG_ERR); } uart0.rx_buf[tmphead] = data; } if(((data == 0x03) || (data == 0x06) || (data == 0x15)) && (avr.counter == 0)) { data = 0x03;//Это для отлавливания ошибочной ситуации } break; //Прередача case SOURCE_THRE: tmptail = uart0.tx_tail; if(uart0.tx_head != tmptail) { tmptail = (uart0.tx_tail + 1) & UART0_TX_BUFFER_MASK; uart0.tx_tail = tmptail; U0THR = uart0.tx_buf[tmptail]; } else { uart0.flags &= ~(1<<UART0_FLAG_TX_IN_PROGRESS); uart0.flags |= (1<<UART0_FLAG_TX_COMPLETE); } break; //Таймаут приема case SOURCE_RX_TIMEOUT: data = U0LSR; data = U0RBR; break; //Ошибка case SOURCE_ERROR: data = U0LSR; data = U0RBR; break; //Хрень какая-то default: data = U0LSR; data = U0RBR; } VICVectAddr = 0; }
Функции разрешения/запрещения передачи:
//:::::::::::::::::::::::::::::::::::::::::::::::::::::: // Запрет приема //:::::::::::::::::::::::::::::::::::::::::::::::::::::: void UART0_DisableReciveIRQ(void) { U0IER &= ~(1<<U0IER_RBR_Interrupt_Enable_BIT); } //:::::::::::::::::::::::::::::::::::::::::::::::::::::: // Разрешение приема //:::::::::::::::::::::::::::::::::::::::::::::::::::::: void UART0_EnableReciveIRQ(void) { u8_t temp; temp = U0LSR; U0FCR = (1<<U0FCR_FIFO_Enable_BIT) | (1<<U0FCR_Tx_FIFO_Reset_BIT) | (1<<U0FCR_Rx_FIFO_Reset_BIT); U0IER |= (1<<U0IER_RBR_Interrupt_Enable_BIT); } //:::::::::::::::::::::::::::::::::::::::::::::::::::::: // Старт передачи //:::::::::::::::::::::::::::::::::::::::::::::::::::::: void UART0_Transmit_On(void) { UART0_DisableReciveIRQ(); IO0SET |= (1<<GL_BUS_DIR); //Включим передатчик RS485 } //:::::::::::::::::::::::::::::::::::::::::::::::::::::: // Стоп передачи //:::::::::::::::::::::::::::::::::::::::::::::::::::::: void UART0_Transmit_Off(void) { IO0CLR |= (1<<GL_BUS_DIR); //Отключим передатчик RS485 UART0_EnableReciveIRQ(); //Разрешим прием }
Проверка опустошения сдвигового регистра:
u8_t UART0_Check_Shift_Reg_Emty(void) { if((uart0.flags & (1<<UART0_FLAG_TX_COMPLETE)) != 0) { if((U0LSR & (1<<U0LSR_TEMT_BIT) != 0) && (U0LSR & (1<<U0LSR_THRE_BIT) != 0)) { uart0.flags &= ~(1<<UART0_FLAG_TX_COMPLETE); return 1; } } return 0; }
Применеие в майне:
system.state = SYSTEM_STATE_SCPU_BOOT; while(1) { UART0_Transmit_On(); UART0_Transmit(0x15); system.start_timer = TIME; do { if(UART0_Check_Shift_Reg_Emty() != 0) { UART0_Buf_Clr(); UART0_Transmit_Off(); } }while(system.start_timer != 0); }
-
А сигнатуру во флеш меджике считывает? Еще - кабель от ком-порта должен быть не 3 провода, т.к. нужно чтобы дергал ногу запуска штатного загрузчика и ресетило.
-
Вачдог какой не активирован случаем? Тактирование отваливается или с физической связью с ком-портом проблемы.
-
Может у пациента закончился период ремиссии? Новые яры желательно не уникряком лечить, а скармливать лицензию.
-
А как с этим делом в других средах обстоит?
Конкретно по вашему случаю не скажу. В кейле я полностью отладил в симуляторе обмен с хостом с загрузкой данных в адреса соответсвующие внешнюю память и плюс обмен i2c с внешней памятью. Не считая таймеров и другой мелочи. В нем можно посмотреть даже что-то вроде осциллограммы на ногах. В общем имхо самый мощный симулятор по нынешним временам.
-
К сожалению с симулированием периферии в яре облом - это вам не кейл. Можно скрипт попытаться написать.
-
Посмотрите в этой теме документец. Там доходчиво про ппп расписано. Плюс на этом форуме не однократно такого плана тема всплывала.
-
Большое спасибо, zltigo за дровишки! Клиенты замордовали проблемой инсталляции софта для программатора.
-
Подскажите, пожалуйста, где можно взять версии 374 и 3_48b.
В личку напишите мне - вышлю.
-
У меня самый древний мтлинк. Я ставлю сеггера 374, затем поверх накатываю длл и джэтлинк от 3_48b. Попробуйте такой вариант.
-
В UxTCTL вродеж есть TXEPT. По крайней мере я его пользовал. Посмотрите мои дровишки - там есть функция USART0_Shift_Reg_Control() я ее когда нужно полю для переключения. Недостаток моей реализации - отсутсвие задержки >=1млс после опустошения сдвигового регистра - забил тогда.
-
Ну вот для затравки известный проект. Ну и по указанной выше ссылке была пара проектов близких к сабжу. Можно еще глянуть микрочиповский стэк. В оригинале он заточен под ихний чип, но имхо не сложно прикрутить в качестве канального уровня ппп ну и добавить инициализацию тела как модема.
-
Для реализации сабжа нужно организовать поддержку PPP протокола, IP и TCP. На фтп есть книга TCP-IP Lean--Web Servers for Embedded Systems (2nd Ed.) вместе с исходниками. Там отлично реализован ппп. Подрихтуйте его под свои нужды. IP и TCP можно самому написать, можно прикрутить готовый типа микроайпи. Но в любом случае придется почитать соответсвующие рфц. Пример можно посмотреть http://aly.ogmis.lt/index.html + в аттаче почитать по ппп.
-
В общем - создаете файл *.ini, сохраняете его, допустем в папке с проектом. Открываете дебаг/функшн эдитор, подгружаете файл. В файле пишете скрипт и компилируете его. Если ошибок нету, скрипт можно запустить на выполнение из командной строки дебагера. В моем случае, я вводил в командной строке I2CMemory(). После этого симулятор начинал эмулировать внешнюю и2с память, с отображением ее внутреннего пространства на указанных адресах и отображением обмена в соответсвующем окне. У кейла ядерный симулятор. Я отладил в нем даже обмен с хостовой программой на PC.
-
Свой стек PPP
в Сотовая связь и ее приложения
Опубликовано · Пожаловаться
Имхо приятнее пользовать какую memcpy из стандартной библиотеки. Вообще библиотека замечательная вещь. Она избавит вас от лишнего гемора во многих случаях.