van_de_luxe
New member
После запуска hello_world и gpio16 начал свой проект. Появились вопросы, связанные с самим принципом разработки для ESP. Попробую задать их на примере разборки исходников uart.c из drivers.
Не понятен комментарий. Где все-таки объявляется и создается эта переменная? поиском по проекту не нашел, в доках тоже.
Также непонятно где эта структура инициализируется, т.к. в функции настройки UART из этой структуры данные уже вычитываются, а как они туда попадают - не понятно.
Для UART0 конфигурируется только Tx pin. Почему для Rx пина не выполняется аналогичных действий? (UART фулл дуплекс)
Почему коммент "not ready"? где описано что нужно именно установить-сбросить биты для сброса, а не просто установить? (например в stm для сброса флага просто пишем в регистр значение и все)
Что произойдет при срабатывании этого триггера и какое значение находится в UartDev.rcv_buff.TrigLvl?
некоторые функции и файлы начинаются с префиксов "eagle" и "ets" откуда они взялись? ets похоже на какую-то аббревиатуру....
У меня модуль ESP-12E, если посмотреть на схему, то именование выводов намекает на существование не только UART0,1, но еще и UART2. В исходниках о нем ничего нет. Ошибка в схеме или исходники неполные?
еще не понятно где находится основной цикл аля while(1){ } или этот модуль работает только по событиям?
Код:
// UartDev is defined and initialized in rom code.
extern UartDevice UartDev;
Также непонятно где эта структура инициализируется, т.к. в функции настройки UART из этой структуры данные уже вычитываются, а как они туда попадают - не понятно.
В функции конфигурации UART есть такая строчка
Не понятно где задается сам массив Rx буфера и где задается его размер.
В проекте есть такие defin'ы и комментарии о размере rx буфера, но не видно, чтобы они действительно влияли на размер, скорее добавлены как максимальное значение для цикл. обработки.
Код:
ETS_UART_INTR_ATTACH(Uart0_IRQHandler, &(UartDev.rcv_buff));
Код:
#define RX_BUFF_SIZE 0x100
#define TX_BUFF_SIZE 100
Код:
PIN_PULLUP_DIS(PERIPHS_IO_MUX_U0TXD_U);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD);
Еще не понятно откуда взялись описания структур
В доках не описаны, только из примеров можно об этом догадаться?
Не нашел описания как включать прерывания, и вообще как ими правильно пользоваться. Опять же только в примере нашел.
Код:
typedef struct {
uint32 RcvBuffSize;
uint8 *pRcvMsgBuff;
uint8 *pWritePos;
uint8 *pReadPos;
uint8 TrigLvl; //JLU: may need to pad
RcvMsgBuffState BuffState;
}RcvMsgBuff;
typedef struct {
UartBaudRate baud_rate;
UartBitsNum4Char data_bits;
UartExistParity exist_parity;
UartParityMode parity; // chip size in byte
UartStopBitsNum stop_bits;
UartFlowCtrl flow_ctrl;
RcvMsgBuff rcv_buff;
TrxMsgBuff trx_buff;
RcvMsgState rcv_state;
int received;
int buff_uart_no; //indicate which uart use tx/rx buffer
}UartDevice;
Не нашел описания как включать прерывания, и вообще как ими правильно пользоваться. Опять же только в примере нашел.
Код:
//clear rx and tx fifo,not ready
SET_PERI_REG_MASK(UART_CONF0(uart_no), UART_RXFIFO_RST | UART_TXFIFO_RST);
CLEAR_PERI_REG_MASK(UART_CONF0(uart_no), UART_RXFIFO_RST | UART_TXFIFO_RST);
Код:
//set rx fifo trigger
WRITE_PERI_REG(UART_CONF1(uart_no), (UartDev.rcv_buff.TrigLvl & UART_RXFIFO_FULL_THRHD) << UART_RXFIFO_FULL_THRHD_S);
У меня модуль ESP-12E, если посмотреть на схему, то именование выводов намекает на существование не только UART0,1, но еще и UART2. В исходниках о нем ничего нет. Ошибка в схеме или исходники неполные?
еще не понятно где находится основной цикл аля while(1){ } или этот модуль работает только по событиям?
Последнее редактирование: