Уфф. Снова есть вопрос. Плата Cy8CKIT-049 та, что без загрузчика-дебагера. Простое нажатие на кнопку "Program" ничего не происходит. Почитал, выяснил, что перед втыканием, надо нажать кнопку и тогда кристалл входит в режим бутлоадера.
Т.е. , если я правильно понял,
я должен в своей программе предусмотреть наличие и запуск бутлоадера, чтобы это не было бы последним программированием этой платы в этой жизни? Вопрос: как?
Чевой-то не врубаюсь, мне нужен модуль Bootloader или Bootladable?
Хм? немного почитал, скачал разные примеры. Получается так, что мне нужен только Bootloadable, так как сам бутлоадер в памяти и так сидит и не меняется. Но, ему (bootloadable), почему-то надо указать хекс от Bootloader. Пока какой-то бутлоадер указал и кое-как это работает.
А вот LCD дисплей не работает. Стекляшка из первого сообщения.
Код: Выделить всё
void WDT0_ISR(void);
struct {
volatile unsigned char tick : 1 ;
} flag;
int main()
{
uint32 count = 0;
CyGlobalIntEnable;
CySysWdtUnlock(); CySysWdtSetMode(CY_SYS_WDT_COUNTER0, CY_SYS_WDT_MODE_INT);
CySysWdtSetMatch(CY_SYS_WDT_COUNTER0, 32000); CySysWdtSetClearOnMatch(CY_SYS_WDT_COUNTER0, 1);
CySysWdtSetInterruptCallback(CY_SYS_WDT_COUNTER0, WDT0_ISR);
CySysWdtEnable(CY_SYS_WDT_COUNTER0_MASK);
LED_Blue_Write(0);
LCD_SEG_Start();
LCD_SEG_WritePixel(LCD_SEG_K1, LCD_SEG_PIXEL_STATE_OFF);
LCD_SEG_WritePixel(LCD_SEG_K2, LCD_SEG_PIXEL_STATE_OFF);
LCD_SEG_WritePixel(LCD_SEG_K3, LCD_SEG_PIXEL_STATE_OFF);
LCD_SEG_WritePixel(LCD_SEG_K4, LCD_SEG_PIXEL_STATE_OFF);
LCD_SEG_WritePixel(LCD_SEG_K7, LCD_SEG_PIXEL_STATE_OFF);
LCD_SEG_WritePixel(LCD_SEG_K8, LCD_SEG_PIXEL_STATE_OFF);
LCD_SEG_WritePixel(LCD_SEG_P1, LCD_SEG_PIXEL_STATE_OFF);
LCD_SEG_WritePixel(LCD_SEG_P2, LCD_SEG_PIXEL_STATE_OFF);
LCD_SEG_WritePixel(LCD_SEG_DP1, LCD_SEG_PIXEL_STATE_ON);
LCD_SEG_WritePixel(LCD_SEG_DP2, LCD_SEG_PIXEL_STATE_OFF);
LCD_SEG_Write7SegNumber_0(count, 0u, LCD_SEG_NO_LEADING_ZEROES);
while (1) {
if (flag.tick != 0) {
flag.tick = 0;
++count;
LCD_SEG_Write7SegNumber_0(count, 0u, LCD_SEG_LEADING_ZEROES);
}
}
}
void WDT0_ISR(void) {
CySysWdtClearInterrupt(CY_SYS_WDT_COUNTER0_INT);
flag.tick = 1;
}
Хочу, чтобы цифирки считались по порядку. Но никакого "движения" на экране не наблюдаю. Горят все сегменты, даже те, что я принудительно сказал "LCD_SEG_PIXEL_STATE_OFF".
p.s. update Что-то получилось изменив LCD mode на
High Speed. Во всяком случае всё погасло, окромя DP2. (я пока подключил только верхний ряд контактов индикатора)
p.p.s. Сделал задуманное... Цифирки бегают. Оказывается страшно накосячил в этом 7segment helpere. По моим представлениям он страшно кривой. Почему
левый симовол нулевой, в то время как во всех функциях нумерация идёт
справа.
Потом, хотел взвыть, что отображение уж очень кривое - надо смотреть строго перпендикулярно. Но потом мне в голову вошла мысль, что я на плате не вижу регулятора напряже... О. блин - оно питается от 5 вольт.
Ну и резюме - хотите потрахаться - берите кит за 4$. Хотите нормально поковыряться - надо брать киты по-дороже. С нормальным программатором. Первая проблема - надо всё-время помнить о бутлоадере. Вторая, чтобы поменять программу, надо выткнуть плату, нажать кнопку и воткнуть обратно. Если у вас был запущен (а я его так и держал) Bootloader Host (это чем заливать прошивку), то он пока вы перетыкаете плату теряет COM-порт (вы же его только что выткнули!) и перескакивает на другой (у меня встроенный COM1). Потом вам нужно ждать пока винда появит нововоткнутое устройство, потом пока Bootloader Host тоже пронюхает, что появился еще один порт, пока вы ткнёте, чтобы переключиться на правильный порт... Единственная радость - загрузка происходит быстро. Даже 32килобайта на скорости 115200 пролетают быстро.
p.p.p.s. И всё же не понимаю про эти "пять" разрядов. Включил полностью индикатор - считать начинает с 60000 (плевать он хотел на инициализацию при объявлении). Думал, досчитает до 65535 и начнет с нуля, дык нет - считает дальше - уже 66000. Хотя, может моя вина, что счетчик я объявил 32-х разрядным, а алгоритм перевода в BCD что насчитает, то и показывает.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."