|
LPC13XX |
|
|
|
Dec 15 2009, 10:59
|

Частый гость
 
Группа: Участник
Сообщений: 128
Регистрация: 6-06-06
Из: Москва
Пользователь №: 17 793

|
Цитата(3.14 @ Dec 11 2009, 14:42)  Интресно, а для чего тогда пины вывели? Хороший вопрос  Спросил об этом наших разработчиков.
--------------------
wbw shahr
|
|
|
|
|
Dec 15 2009, 11:21
|

Их либе дих ...
     
Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609

|
Ну да это уже не принципиально, по SWD все-равно приятнее отлаживаться, да и пинов меньше требуется ... Меня сейчас застал в расплох такой момент, в режиме DEEP SLEEP он может просыпаться ТОЛЬКО (я после ознакомления с докой по диагонали подумал, что от любого прерывания работающего модуля может, в частности таймера  ) от внешних GPIO, чего спрашивается "пудрить мозги" тем что включен например АЦП в спячке или нет, когда от этого все-равно в системе никакой реакции не будет ...
--------------------
Усы, борода и кеды - вот мои документы :)
|
|
|
|
|
Dec 16 2009, 15:17
|

Частый гость
 
Группа: Участник
Сообщений: 128
Регистрация: 6-06-06
Из: Москва
Пользователь №: 17 793

|
Цитата(3.14 @ Dec 15 2009, 14:21)  Ну да это уже не принципиально... Ну непринципиально - и хорошо. Просто надо запомнить, что в LPC1300/LPC1100 - только SWD. А наши документописатели уже рисуют новую версию DS и UM без JTAGовских пинов. И зачем они их там нарисовали - ума не приложу
--------------------
wbw shahr
|
|
|
|
|
Dec 22 2009, 12:58
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
Пробую работать с LPC1311. Вот моя тестовая программака. Код #include "LPC13xx.h" #include "clkconfig.h"
volatile char i; void CT16B0_IRQHandler(void) { LPC_TMR16B0->IR = 0x3F; /*clear flag*/ LPC_TMR16B0->MR0 = i; --i; return; } int main (void) { i = 0; /* Enable AHB clock to the GPIO domain. */ LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6);
SystemInit();
// Init Timer16_B0 LPC_SYSCON->SYSAHBCLKCTRL |= (1<<7); LPC_TMR16B0->PR = LPC_TMR16B0->CCR = 0; LPC_IOCON->PIO0_8 = 0x02; LPC_IOCON->JTAG_TCK_PIO0_10 = 0x03; LPC_TMR16B0->MR1 = 0xFF;/*TimerInterval*/ LPC_TMR16B0->MR0 =1; LPC_TMR16B0->MR2 = 0x1F; //test signal with constant pulse width LPC_TMR16B0->MCR=(1<<4)| /*Reset on MR1*/ (1<<3); /*Interrupt MR1*/ /* PWM mode is enabled for CT16B0_MAT0 */ LPC_TMR16B0->PWMC = 1 + (1<<2); NVIC_EnableIRQ(TIMER_16_0_IRQn); LPC_TMR16B0->TCR = 1; /* enable Timer */
while (1) {}; } Здесь настраиваю таймер на выдачу двух ШИМов: один с постоянной скважностью (MR2), другой с изменяемой(MR0). В обработчике прерывания по переполнению таймера (0xFF) делаю либо инкремент скважности, либо декремент. Сигнал с выхода MR0 пропускаю через RC-фильтр (R=5.6 кОм, С=2.2 нФ). На выходе RC имею пилу. Так вот, при инкременте все замечательно. При декременте на пиле появляется зазубрина. Откуда она появляется? И почему ширина импулься с выхода MR0 внезапно становится равна нулю при декременте? Чертовщина какая-то ))). Писал в службу поддержки NXP и вот что они мне ответили Цитата I did a test with your program on a MCB1000 board with the LPC1343 micro and and did not see any difference. The choice of output might be the problem. Try an other output mode in IOCON register (bit 3 and 4).
The jitter and the rise and fall time are the same with increment or decerment i На сайте NXP нет почтового адреса (e-mail) службы поддержки, а только WEB-форма, которая позволяет отправлять только текст. Может shahr посодействует в получении ответа на мой вопрос. Или 3.14 повторит мой эксперимент.
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
Sep 5 2010, 17:57
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Если не трудно, могут ли владельцы плат MCB1300 или LPCXpresso 1343 проверить приложенную прошивку? Вроде бы сделано все правильно. Файл компановщика сконфигурирован в соответствии с AN10904. Прошивка очень простая, но уже весь мозг сломал - не работает HID. Основная часть кода выглядит следующим образом: Код #include "includes.h" /* LPC13xx definitions */
#define USB_VENDOR_ID 0x1FC9 #define USB_PROD_ID 0x0003 #define USB_DEVICE 0x0100
USB_DEV_INFO DeviceInfo; HID_DEVICE_INFO HidDevInfo; ROM ** rom = (ROM **)0x1fff1ff8;
#define EN_TIMER32_1 (1<<10) #define EN_IOCON (1<<16) #define EN_USBREG (1<<14)
#define PORT0 0 #define PORT1 1 #define PORT2 2 #define PORT3 3
/* * Get HID Input Report -> InReport */
void GetInReport (uint8_t src[], uint32_t length) { uint8_t PCInReportData = 0; /* */ src[0] = PCInReportData; }
/* * Set HID Output Report <- OutReport */ void SetOutReport (uint8_t dst[], uint32_t length) { uint8_t PCOutReportData = dst[0]; }
int main (void) { volatile int n; HidDevInfo.idVendor = USB_VENDOR_ID; HidDevInfo.idProduct = USB_PROD_ID; HidDevInfo.bcdDevice = USB_DEVICE; HidDevInfo.StrDescPtr = (uint32_t)&USB_StringDescriptor[0]; HidDevInfo.InReportCount = 1; HidDevInfo.OutReportCount = 1; HidDevInfo.SampleInterval = 0x20; HidDevInfo.InReport = GetInReport; HidDevInfo.OutReport = SetOutReport; DeviceInfo.DevType = USB_DEVICE_CLASS_HUMAN_INTERFACE; DeviceInfo.DevDetailPtr = (uint32_t)&HidDevInfo; LPC_SYSCON->SYSAHBCLKCTRL |= (EN_TIMER32_1 | EN_IOCON | EN_USBREG); (*rom)->pUSBD->init_clk_pins();
for (n = 0; n < 75; n++) {}; (*rom)->pUSBD->init(&DeviceInfo); (*rom)->pUSBD->connect(TRUE); while(1); }
void USBIRQ_IRQHandler(void) { (*rom)->pUSBD->isr(); }
Эскизы прикрепленных изображений
Прикрепленные файлы
Hid.zip ( 650 байт )
Кол-во скачиваний: 23
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|