Jump to content

    

mempfis_

Свой
  • Content Count

    995
  • Joined

  • Last visited

Community Reputation

0 Обычный

About mempfis_

  • Rank
    Знающий

Контакты

  • Сайт
    Array
  • ICQ
    Array
  1. Порт G находится в области оперативной памяти, поэтому обращение к нему через команды работы с оперативкой (lds/sts кажется). Ну и адреса соответствующие. Смотрите в доке - там всё написано.
  2. В M25PE16 каких-либо проблем замечено не было. Перед каждой операцией чтения/записи отправляем команду release from deep power down - 0xab. После выполнения каждой операцией чтения/записи отправляем команду deep power downn - 0xd9. Чтение согласно документации - CS_LOW, команда read data bytes 0x03, 3 байта адреса, чтение нужного кол-ва байт, CS_HIGH Запись согласно документации - CS_LOW, команда write enable 0x06, CS_HIGH, CS_LOW, команда page write 0x0a, 3 байта адреса, запись от 1 до 256 байт, CS_HIGH Ожидание завершения записи опросом байта статуса Статус читаем так (приведу кусок готового кода, чтобы было понятнее) unsigned int waitBusy(void) { volatile unsigned int status; SELECT_SPI(nSS_SFLASH); SPIWriteChar(MP25_RDSR); //0x05 - read status register for(unsigned int i=0; i<50; i++) { status = SPIWriteChar(0x00); //MP25_WIP = 0x01 write in progress if((status & MP25_WIP) == 0) { DESELECT_SPI(); return 1; } delay_ms(1); } DESELECT_SPI(); return 0; }
  3. На практике большинству клиентов, использующих сим-карты Киевстар, подходит APN www.kyivstar.net, Life - internet, MTS - www.umc.ua (насчёт последнего я не уверен, но за пару лет никто не просил сменить APN по умолчанию для MTS, так что наверное подходит). Эти 3 APN по умолчанию избавляют клиентов и нас от лишней головной боли, связанной с настройкой GPRS в устройствах. Если у кого APN не подходит, то его просто меняют на нужный в настройках.
  4. Согласен что у некоторых операторов могут быть разные APN для различной тарификации. Но как показала практика чаще всего работет принцип один оператор - один APN. Поэтому выбор APN по коду оператора прекрасно работает в серийных устройствах. Если же необходимо использовать один APN не зависимо от кода оператора, то тут есть два варианта. Ввести настройку - запрет/разрешение автоопределения APN или прописать несколько связанных пар настроек код оператора-APN и анализировать их. У меня в серийном проекте реализован второй принцип - есть одна настройка общий APN, и 5 пар связанных настроек код оператора - APN. Если я прописываю код оператора, то при совпадении используется соответствующий ему APN, иначе общий. Причём по умолчанию в эти связанные пары прописаны корректные значения. В итоге все устройства после прошивки работоспособны со всеми операторами.
  5. Значит сначала он выяснит как можно выполнить определение кода оператора, чтобы реализовать идею "какую симку не вставь, всегда будет мобильный интернет", а уже потом будет разбираться, зачем нужен APN.
  6. AT+COPS=0,2 //настроить отображение кода оператора в формате MNC+MCC AT+COPS? - будет возвращаться код опертора в формате MCC+MNC т.е. все ваши коды операторов будут возвращаться только в числовом виде В зависимости от кода оператора подставляете нужный APN, который заранее выясняете у оператора.
  7. Хоть там написано и по английски, но читаю хорошо. UM10360, LPC17xx User manual, Rev. 2 — 19 August 2010, страница 407 Table 361: SPI Control Register (S0SPCR - address 0x4002 0000) bit description 11:8 BITS 1000 8 bits per transfer 1001 9 bits per transfer 1010 10 bits per transfer 1011 11 bits per transfer 1100 12 bits per transfer 1101 13 bits per transfer 1110 14 bits per transfer 1111 15 bits per transfer 0000 16 bits per transfer Конкретно процессор LPC1754. В LPC178x/7x (UM10470 LPC178x/7x User manual) SSP - вот там действительно от 4х до 16ти бит. В LPC11xx (UM10398 LPC111x/LPC11Cxx User manual) тоже SSP от 4х до 16ти бит.
  8. Lpc17? Писал выше что если верить докам то он может иметь от 8 до 16 бит.
  9. В доках на LPC17 указана длина посылки от 8 до 16бит, в KINETIS MKL15 только 8 бит, в STM32F10x 8 или 16 бит. Лично я в проектах всегда использую только 8битные посылки, даже если процессор подерживает возможность передавать требуемое мне кол-во бит. Так проще сопровождать проект и переводить при необходимости с одного процессора на другой. Кстати SPI очень легко реализуется простым ногодрыганием (програмный SPI). И если Вам принципиально получить 24 бита, то можно релизовать его именно так.
  10. Посмотрите как передают NMEA-строки $GPGGA,.........*AB\r\n Есть стартовая последовательность ($) Тип пакета (если он нужен, GPGGA) Данные. Контрольная сумма сообщения (отделена от тела пакета *, в данном случае xorc сообщения, но может быть crc или lrc в зависимости от требований). Стопова комбинация (\r\n, реально всегда хватает только \r) Защищена от бинарного мусора т.к. передача ведётся в ASCII-кодированных символах. Легко парситься из-за наличия старт-стоповых комбинаций. В вашем случае для передачи бинарных данных можно передавать пары символов '0' '0' == 0x00, 'A' 'F' == 0xaf и т.д. Данные легко декодируются даже на мелкой Tiny13 табличным методом, занимая при этом минимум кода.
  11. Попробуйте начать писать под эти AVRки на С, если конечно не стоит задача написать всё на ассемблере. Оставьте работу с регистрами компилятору, а сами займитесь программой. Ни Вы, ни кто-либо другой не оценит в будущем то время, которое было затрачено на написание полурабочего непереносимого ассемблерного кода. IAR, WinAVR, Code Vision - доступные "бесплатные" компиляторы Вам в помощь. А также масса примеров с форума и интернета, написанные по большей части на С.
  12. RX инициализируется один раз, а обслуживается уже в прерываниях. Во вложении есть пример настройки всех RX MSG OBJECT - это функция CAN_InitRxMessages(). А вот TX MSG OBJECT в этом процессоре лично я настраиваю каждый раз перед отправкой сообщения - мне так проще работать с ними. В LPC17 CAN устроен по другому - там передавать получалось используя FIFO сообщений. А вот в LPC11 всё не так удобно .... :( Но с другой стороны разобравшись с примерами удалось состряпать приведённый во вложении код, который успешно функционирует в 4х серийных проектах без каких-либо нареканий на работу CAN-шины.
  13. А какое значение он имеет? В обработчике прерываний происходит чтение LPC_CAN->STAT, после чего определяется наличие или отсутствие ошибок. При отсутствии ошибок выполняется обработка MSG OBJECT сгенерировавшего прерывание. При обработке MSG OBJECT выполняется его чтение. Возможно при чтениее LPC_CAN->STAT или после чтения содержимого MSG OBJECT обнуляются флаги NEWDATA и INTPND. В документации написано: When the CPU transfers the contents of Message Object to the IFx Message Buffer registers by writing its number to the IFx Command Request Register, bits NEWDAT and INTPND in the corresponding Command Mask Register should be reset to zero (TXRQST/NEWDAT = ‘1’ and ClrINTPND = ‘1’). что я понимаю как Когда цпу перемещает содержимое MSG OBJECT в IFx buff путём записи его номера в IFx Command Request Register биты NEWDAT and INTPND в соответствующем Command Mask Register должны обнулиться. В привёдённом во вложении обработчике прерываний никаких дополнительных сбросов битов нет, но при этом нет и лишних прерываний, что наверняка было бы, еслибы бит INTPND не сбрасывался. Возможно у Вас есть ошибки на шине или Вы не корретно обрабатываете RX/TX MSG OBJECT.
  14. Бегло просмотрел документацию на lpc11 и lpc15 - CAN в них похоже одинаковый. На lpc11 у меня несколько серийных проектов. Просмотрите в приложенных файлах инициализацию и работу с CAN. Для работы я выбираю какие MSG OBJECT будут приёмные (RX), а какие передающие (TX) //msg object для приёма сообщений #define S6_BAM_CM_RX_MSG_OBJ 1 #define S6_BAM_DT_RX_MSG_OBJ 2 //msg object для отправки сообщений #define S6_PASSPORT_TX_MSG_OBJ 10 #define S6_COUNTERS_TX_MSG_OBJ 11 #define S6_STATUS0_TX_MSG_OBJ 12 #define S6_STATUS1_TX_MSG_OBJ 13 #define S6_STATUS2_TX_MSG_OBJ 14 #define S6_STATUS3_TX_MSG_OBJ 15 #define S6_BAM_TX_MSG_OBJ 16 Настройка RX есть в приложенных файлах. При настройке определяется также маска фильтрации ACF-фильтра. С TX работаем так: //Передача сообщения 01 02 03 04 05 06 07 08 (01 -младший байт в сообщении, 08 - старший) на id 21 bit 0xabcd (extended frame) stCANMSGObject msg; msg.id = EXT_FRAME_TYPE | 0xabcd; msg.dlc = 8; //длина данных (от 1 до 8) msg.data[0] = 0x0201; msg.data[1] = 0x0403; msg.data[2] = 0x0605; msg.data[3] = 0x0807; CAN_Send(S6_PASSPORT_TX_MSG_OBJ, &msg); Приём данных осуществляется в прерывании. Любое принятое сообщение извлекается из RX MSG OBJECT и закидывается в FIFO. Далее уже в основной программе FIFO опрашивается в цикле до опустошения. //проверяем rx fifo stCANMSGObject can_rx_msg; while(getMsgCAN(&can_rx_msg) != 0) { //выполняем проверку принятого сообщения ...... }
  15. Не сложными будут курсовые связанные с реализацией ШИМ или релейного управления каки-либо элементом (вентилятором, лампой подогрева). Там будет и порос датчика температуры (напр. DS18b20), и опрос кнопок, и индикация на LED или LCD индикаторах, и управление чем-либо (MOSFET, BT, реле). Ещё вариант опрос энкодера с управлением шимом MOSFET для реализации регулятора освещения для настольной LED-лампы или просто управления яркостью LED-ленты.