В данный момент изучаю LPC1114. После того как прошил плату,
микроконтроллер перестал опознаваться, у меня такое чувство что убил контроллер строчкой:
SYSCON_MCKSel(SYSCON_MCK_PLLINPUT);
Замыкание ноги RESET перед подключением программатора не помогает.
При попытке подключить
J-Flash ARM v4.20 пишет:
Failed to download RAMCode for CPU clock frequency detection!
Failed to measure CPU clock frequency
Failed to connect
IAR пишет:
Parity error (Data = 0xFFFFFFFF, ReceivedParity=1)
А вообще хотелось настроить чтобы контроллер работал от кварца, чтобы контроллер работал на 80 МГц.
Использую:
IAR 5.5(редактирую в Eclipse)
Нелегальный программатор J-Link
к МК подключен кварц 10 Мгц
В проект включил: ОС - CoOS, CMSIS, LPC11xx_lib.
Кусок инициализации:
Код:
|
TIM_TIMERCFG_Type TIM_ConfigStruct;
TIM_MATCHCFG_Type TIM_MatchConfigStruct;
GPIO_SetDir(PORT3, LED_RED, 1);
LPC_IOCON-›PIO0_1=1;
LPC_SYSCON-›SYSOSCCTRL = 0×01;
SYSCON_MCKSel(SYSCON_MCK_PLLINPUT);
SysOscConfig (ENABLE,SYSCON_MOSC_FREQRANG_1_20);
SYSCON_MCKUpdate();
SYSCON_CLKOUTClkSel(SYSCON_CLKOUT_CLK_SYSOSC);
SYSCON_CLKOUTClkDiv(8);
SYSCON_CLKOUTClkUpdate();
SYSCON_AHBPeriphClockCmd(SYSCON_AHBPeriph_IOCON ,ENABLE);
LPC_IOCON-›PIO1_10=0x02;
LPC_IOCON-›PIO0_1=1;
LPC_TMR16B1-›PWMC|=2;
TIM_ConfigStruct.PrescaleOption = TIM_PRESCALE_TICKVAL;
TIM_ConfigStruct.PrescaleValue = 1;
TIM_MatchPins(LPC_TMR16B1,TIM_PINS_MAT1);
TIM_Init(LPC_TMR16B1, TIM_TIMER_MODE,&TIM_ConfigStruct);
TIM_MatchConfigStruct.MatchChannel=1;
TIM_MatchConfigStruct.ExtMatchOutputType=3;
TIM_MatchConfigStruct.MatchValue=(0xFFFF››1);
TIM_ConfigMatch(LPC_TMR16B1,&TIM_MatchConfigStruct);
TIM_ResetCounter(LPC_TMR16B1);
TIM_Cmd(LPC_TMR16B1, ENABLE); |
lpc11xx_syscon.c
Код:
|
/************************************************** *******************//**
* @brief Selects the main system clock source
* @param[in] SYSCON_MCK_source Clock source, it can be:
* - SYSCON_MCK_IRC : IRC oscillator
* - SYSCON_MCK_PLLINPUT : Input clock to system PLL
* - SYSCON_MCK_WDTOSC : WDT oscillator
* - SYSCON_MCK_PLL : System PLL clock out
* @return none
************************************************** ********************/
void SYSCON_MCKSel(uint32_t SYSCON_MCK_source)
{
CHECK_PARAM(PARAM_MCKSEL(SYSCON_MCK_source));
LPC_SYSCON-›MAINCLKSEL = SYSCON_MCK_source;
//SYSCON_MCKUpdate(); // Не могу понять почему оно за комментировано
}
/************************************************** *******************//**
* @brief Updates the clock source of the main clock with the new
* input clock
* @param[in] None
* @return None
************************************************** ********************/
void SYSCON_MCKUpdate (void)
{
LPC_SYSCON-›MAINCLKUEN = 1;
LPC_SYSCON-›MAINCLKUEN = 0;
LPC_SYSCON-›MAINCLKUEN = 1;
/* Wait until updated */
while (!(LPC_SYSCON-›MAINCLKUEN & 1));
} |
Проблема была решена следующий образом:
1. Открыл в меню IARa Project-›Options... выбрал настройки J-Link вкладка Setup
2. Там поменял параметр Reset с "Reset pin" на "Core" как показано на скриншоте.
Однако после этого стали появляться warning-и, которые исчезли после установки Reset в Normal.
Файл с логами warning-ов вложил в сообщение
На другой убитой плате этот способ не помог. Зато помогло заземление PIO0_1, но перед этим надо выключить питание контроллера. ногу удерживать в заземленном состоянии до начала программирования