MCU

Материал из fidoman.ru
Версия от 15:37, 12 ноября 2021; Sergey (обсуждение | вклад) (→‎jobs)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)

cam

ESP32-CAM OV2460

links

Lightweight C compilers http://fun4diy.com/

STM8

compilers comparation http://www.colecovision.eu/stm8/compilers.shtml

startup

  1. Power requirements: 3.3-5V
  2. Reset circuit (100nF cap)
  3. Select clock source (ext.crystal/HSI)
  4. Choose halt modes for
    1. flash
    2. HSI, HSE
  5. use timer or AWU for wake-up if no ext.ints
  6. calibrate LSI osc.
  7. configure GPIO
  8. use watchdog

AWU

  • on int disable AWU (or new int will be generated instantly)
  • before re-enable re-load counter

UART

- word length: UART_CR1.M
- stop bits: UART_CR3
- baud rate: UART_BRR2 then UART_BRR1
- en transmitter: UART_CR2.TEN
- send data: UART_DR and wait until TC goes 1

UART_DR:

 write goes to TDR
 read goes from RDR

TXE: set at end of transmission (and if TIEN then int is generated) - can send more

 wait for TXE before write DR

TC: transmission complete (and if TCIEN then int is generated) - may disable transmitter

SBK bit: send break character (do not set again before prv break is sent)

UART_CR1.R8: MSB for received 9-bit words

NF: set when start bit has spurious '1's

- en receiver: UART_CR2.REN

clear REN to abort receive immediately

RXNE: set when data moved to RDR (and intr if RIEN set)

if char is received without RXNE reset then overrun error raised

break char: received as framing error

idle char: intr if ILIEN set

- UART_CR1.PCEN : one bit of total length will be used for parity
- UART_CR1.PS : even/odd parity
- UART_CR1.RWU: mute mode. WAKE = 0: until idle, WAKE = 1: listen for address (MSB=1 as mark of address - 4 bits LSB)
- UART_CR4.ADD: own address
- only first byte after idle considered as possibly containing address mark? not clear.

jobs

MAYHALT - semaphore, must be incremented on start of each no-halt process e.g. UART TX syssleep func:

 check for mayhalt
 if zero halt
 if not wfi
 loop if no jobs else get toppest by pri and start

sysjobs:

 populated with int handlers, address of jobs to run (with associated data ptr)

sysqueues:

 if smth is put on it, associated job is created by system
 queue record:
   what to do, data, completion action

for example, if program puts report on send queue and queue is full, program must be suspended or something in queue must be deleted

alternatively, program can put something on queue, asking to suspend self and to be resumed on completion