Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: HC32
Шарага > Soft - НЕ железо > Программирование МК
Harbinger
Однако. Микрософтовский переводчик тоже неплох. В смысле правдоподобности. Но кушает за раз только 10000 символов (гуголь - 5000). Бесит.
В течение получаса-часа получается какая-то вот такая фигня (ещё не вычитано, в процессе).

(Злобный оффтоп вдогонку). HC32F003 - один в один по распиновке с STM8S003, и стоит те же 25 центов. Но - Cortex-M0+.

В продолжение оффтопа. HC32L130 благополучно прошился и... свалился в HardFault. Ура, что ли. laughter2.gif Пора курить матчасть, User Manual перевести бы... там 820 страничек всего-то.

Цитата(Harbinger @ 9.3.2019, 19:52) *
В продолжение оффтопа. HC32L130 благополучно прошился и... свалился в HardFault.

Вытащил. Забыл, что у него флэш с нуля начинается, а не как у STM32 - послал по несуществующему адресу (просто для справки: оттуда читаются сплошные 0xAA). Таблица параметров записалась. Порты, UART и SPI как бы проинициализировались, на очереди таймеры... блд. Влетает по прерыванию в дефолтный обработчик (бесконечный цикл). Утро вечера мудренее...
Harbinger
Сюда перенесу весь оффтоп по теме из др. мест.
ViKo
Ссылку на datasheet не на кітайскай мове - сюды!

Наконт "забойцы STM" не згодны. Што гэтыя цэнты лічыць, калі яго ўклад у канчатковую цану выраба дае лічаныя працэнты.
Harbinger
<Записки лаборанта> wink.gif
Завёл-таки HC32L130 в связке с RFM69, 4 дня ушло (чистых).
Некоторые впечатления.
Ввиду того, что юзер-мануал пока не переведён, понадеялся на авось, т.е. на библиотеки. Из последней версии SDK.
GPIO: вопросов нет. Всё практически как у STM32L.
SPI: Spi_SendData и Spi_ReceiveData из библиотеки ведут себя, опустив подробности, странновато. Пришлось левой ногой написать
Код
uint8_t Spi_MasterTransfer(en_spi_channel_t enCh, uint8_t data)
{
    uint8_t retval;
    ASSERT(IS_VALID_CH(enCh));
    if(Spi0 == enCh)
    {
        while(TRUE != M0P_SPI0->STAT_f.TXE);
        M0P_SPI0->DATA = data;
        while(TRUE != M0P_SPI0->STAT_f.RXNE);
        retval = M0P_SPI0->DATA;
        
    }
    else
    {
        while(TRUE != M0P_SPI1->STAT_f.TXE);
        M0P_SPI1->DATA = data;
        while(TRUE != M0P_SPI1->STAT_f.RXNE);
        retval = M0P_SPI1->DATA;    
    }
    
    return retval;
    
}

Да, тайм-ауты надо вернуть, не помешают.
UART. С библиотечными функциями тоже не сложилось. В примерах DDL они местами обходятся, без особых объяснений.
Пока что работоспособный вариант (на прерываниях) выглядит так (в устройстве полудуплекс, потому прерывание RX можно запрещать на время передачи и наоборот).
Код
void USART_SendBlock(uint8_t bl)
{

    TxPointer = 0;
        TxCount = bl;
    Uart_ClrStatus(UARTCH0,UartTC);
    M0P_UART0->SBUF = TXbuffer[0];
    Uart_DisableIrq(UARTCH0,UartRxIrq);
    Uart_EnableIrq(UARTCH0,UartTxIrq);

}

Код
void UART0_IRQHandler(void)
{
        uint8_t tmp;
    //TX
    if(Uart_GetStatus(UARTCH0, UartTC) == TRUE)
        {
        Uart_ClrStatus(UARTCH0, UartTC);
        if (TxPointer < TxCount)      // it's end?
            {
                TxPointer++;            // next byte
                M0P_UART0->SBUF = TXbuffer[TxPointer];

            }
        else
        {
            Uart_DisableIrq(UARTCH0,UartTxIrq);
            Uart_EnableIrq(UARTCH0,UartRxIrq);
            TxCount=0;
            TxPointer=0;
        }
        }
        
        else
        {            //RX
            

            if(Uart_GetStatus(UARTCH0, UartRC) == TRUE)
            {    
            tmp = M0P_UART0->SBUF;
                Uart_ClrStatus(UARTCH0, UartRC);
                        //then store tmp in RX buffer etc.
            }
            else Uart_ClrIsr(UARTCH0); //other flags
        }
            
}

Всё бы ничего, если бы скорость была правильная. При использовании RCH (22,12 МГц, и 24 МГц тоже) в качестве источника тактирования это оказалось не так. При установке 115200 бит/с реальная скорость оказалась 113500. Вылечилось "грязным хаком" в sysctrl.c: задефайнена экспериментально подобранная константа
Код
#define RCH_CR_TRIM_USER22M_VAL         1860

и применена вместо RCH_CR_TRIM_22_12M_VAL в функции Sysctrl_SetRCHTrim:
Код
en_result_t Sysctrl_SetRCHTrim(en_sysctrl_rch_freq_t enRCHFreq)
{
    en_result_t enRet = Ok;

    //Load RCH Trim value
    switch (enRCHFreq)
    {
        case SysctrlRchFreq4MHz:
            M0P_SYSCTRL->RCH_CR_f.TRIM = RCH_CR_TRIM_4M_VAL;
            break;
        case SysctrlRchFreq8MHz:
            M0P_SYSCTRL->RCH_CR_f.TRIM = RCH_CR_TRIM_8M_VAL;
            break;
        case SysctrlRchFreq16MHz:
            M0P_SYSCTRL->RCH_CR_f.TRIM = RCH_CR_TRIM_16M_VAL;
            break;
        case SysctrlRchFreq22_12MHz:
            //M0P_SYSCTRL->RCH_CR_f.TRIM = RCH_CR_TRIM_22_12M_VAL;
        M0P_SYSCTRL->RCH_CR_f.TRIM = RCH_CR_TRIM_USER22M_VAL;
            break;
        case SysctrlRchFreq24MHz:
            M0P_SYSCTRL->RCH_CR_f.TRIM = RCH_CR_TRIM_24M_VAL;
            break;
        default:
            enRet = ErrorInvalidParameter;
            break;
    }
    
    return enRet;
}

Константа заводской калибровки, вычитанная по адресу 0x00100C02, в конкретном контроллере равнялась 1845. С другим чипом фокус не сработал, тоже пришлось подбирать. Естественно, так делать не надо. Возможно, мне попались МК из первых партий, с кривыми калибровками, и в дальнейшем исправили. Но лучше всё-таки кварц поставить и забыть о проблеме. А вот это пока не получилось - пока не разобрался, всё переключается, но то ли срывается генерация, то ли что-то ещё - через некоторое время, порядка 100 мс, происходит сброс. diablo.gif
Ещё момент - перепутанная таблица векторов прерываний, из-за чего библиотечные функции с указателями на обработчики вовсе не обязательно будут работать (в моём случае это был BT - basic timer, конкретно - нулевой). Лечится заменой стартап-файла из кейловского software pack на таковой из примеров DDL, выбрасыванием из проекта "interrupts_hc32l136.c", обнулением указателей на коллбэки в структурах инициализации и прописыванием обработчиков самостоятельно. Хотя идея с указателями вроде как интересная.
В общем-то в необходимости перевода документации, юзер-мануала (того, что у ST референс) прежде всего, и дальнейшего вдумчивого "курения", с самого начала сомнений не было, ну вот оно вживую и подтвердилось.

Цитата(ViKo @ 12.3.2019, 12:26) *
Ссылку на datasheet не на кітайскай мове - сюды!
В процесі. Поки грошей за це не дають, справа просувається повільно - час від часу перекладаю фрагменти, котрі цікаві в даний момент. Поки що зробив близько 1013 сторінок з 70 з чимось72. А ще ж user manual (820 сторінок) і аппнотів десь на півтисячі.
Перекладом ще займається злий кіт dosikus з казуса, він, мабуть, далі просунувся.
ViKo
Ці варта было мудохацца за 20 цэнтаў?
Harbinger
Десять бабусьок - уже рупель. smile.gif
В даному разі інтерес скоріше спортивний. Як колись до TMP87 тошибівських.
Зараз пошукаю, як там RSTSRC називається, та й вичитаю, якого фіга воно ресетиться.
Ага: M0P_RESET->RESET_FLAG. Чогось на кшталт "clock failure reset" там нема. Але є "System abnormal reset", може, це воно.
Код
typedef struct
{
    uint8_t     u8Por5V     :1;         ///< 5V Start reset
    uint8_t     u8Por1_5V   :1;         ///< 1.5V Start reset
    uint8_t     u8Lvd       :1;         ///< Low voltage detection reset
    uint8_t     u8Wdt       :1;         ///< Watchdog reset
    uint8_t     u8Pca       :1;         ///< PCA reset
    uint8_t     u8Lockup    :1;         ///< System abnormal reset
    uint8_t     u8Sysreq    :1;         ///< Software reset
    uint8_t     u8RSTB      :1;         ///< RESET pin reset
}stc_reset_cause_t;
ViKo
Даю на водку:
https://www.nuvoton.com/hq/?__locale=en
Harbinger
То я знаю. І "еволюшен борд" їхній є (на NUC140), подарували колись. Та ж сама фішка - живлення від 1,8 до 5 В. Ціни десь такі, як у STM32, але з режимами енергозбереження - повний швах.
Щодо N76LE - так, вони дешевші навіть за STM8S003F3P6 майже вдвічі (10 грн. прямо тут). Ядро 51, котре я непогано знаю. І на цьому все.

Пля. laughter2.gif Промив плату спиртом. Кварц фуричить.
ViKo
Яшчэ такія Гіга-дывайсы есць:
http://www.gigadevice.com/products/microco.../arm-cortex-m3/
Harbinger
Короче... baud rate generator там такой же, как у многих 51, банальный 16-битный таймер. Тем самым при низких тактовых получить сносную точность скорости UART не получится. Нужна частота или кратная 1,8432 МГц, или где-то от 16 МГц.
...И нахрена я PLL включал? Где-то нахомутал и окирпичил три чипа. Попытаюсь внешнюю тактовую подать, чтобы оживить.
Про гигадевайсы я тут постил года где-то два назад. Ещё SN32 есть такие себе. И т.д. и т.п., их там в Китае уже много всяких. HC32 использует в своей продукции китайский, если можно так выразиться, партнёр. Так получилось...
Harbinger
Уря, товагищи. С помощью кнопки сброса и нецензурных заклинаний над ж-линком один чип раскирпичил. Обошлось без внешней тактовой. В принципе та же фигня, что с EFR32 год назад - штатный "connect under reset" до срлампочки. Что там за хрень с PLL, вопрос остался открытым, но решится, куда денется. Пока что поработает с кварцем 11,0592 или 7,3728 - какой в хозяйстве найдётся.
(upd) Остальные тоже ожили.
Harbinger
RTFM, едрить. Всё там нормально и с UART, и с калибровкой RCH. Кварц на 11,0592 нашёлся, но выпаял взад, за ненадобностью.
Одну циферку не приметил. UART Mode 3 вместо 1. 3 - это 9 бит. fool.gif
Harbinger
Осталось два чудика. Один не коннектился с j-link изначально (то, что в него было прошито - как-то работает), второй через раз и обнаружилось КЗ на землю с одного из портов. Фен-паста-тестер... тоска. pardon.gif
ViKo
Нагу асобна падняць, провадам эмалірованым працягнуць.
Harbinger
Відразу не помітив... там корпус QFN, підняти можна тільки весь. pardon.gif Поки що не брався, роботи дофіга... в двох інших платах на землі сидять кілька інших портів, підозрюю, що з метою мінімізації енергоспоживання. Або ж "просто так вийшло".
YIG
Цитата(Harbinger @ 8.4.2019, 20:21) *
Відразу не помітив... там корпус QFN, підняти можна тільки весь. pardon.gif Поки що не брався, роботи дофіга... в двох інших платах на землі сидять кілька інших портів, підозрюю, що з метою мінімізації енергоспоживання. Або ж "просто так вийшло".

Корпус QFN хорош тем, что его можно отпаять даже простым паяльником, прогрев термал пад со дна.
Я уж молчу про фен, газовый паяльник и ИК-паяльник russian_ru.gif
Harbinger
Пошла какая-то движуха. В английской версии сайта возник раздел "Download". Естественно, пустой. girl_crazy.gif
Mr.Yuran
Опять нет повода не выпить
drinks.gif
Harbinger
Сотворили FTP и всё туды выгрузили.
ftp://180.168.214.142
login: HdscCustomer
pass: HdscGuest2019!
Mr.Yuran
Касательно корпусов.
АД выпустили мсх 5940 исключительно в бга (биджиэй, кому не понятно).
Будущее неумолимо наступает, как ни крути. Бабушкам с паяльниками пора на пенсию.
Secter
Цитата(Mr.Yuran @ 9.8.2019, 6:56) *
Бабушкам с паяльниками пора на пенсию.

girl_crazy.gif Ты-плять = ЖИРАФ ... laughter2.gif
Harbinger
Цитата(Mr.Yuran @ 9.8.2019, 6:56) *
Бабушкам с паяльниками пора на пенсию.
Конечно. И уступить место девушкам с фенами. 410.gif
Mr.Yuran
Цитата(Harbinger @ 18.8.2019, 8:44) *
Конечно. И уступить место девушкам с фенами. 410.gif

Был в одной конторе, там пацанчик на полуавтомате за пол-дня любую плату накидывает.
А у нас был Вася, тоже хотел чего-то прикупить. Но его предусмотрительно сожрали. Подловили на нарушении режима.
А мужик был толковый и с технологиями знаком.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2020 IPS, Inc.