08.07.2021, 10:43
|
|
Прописка
Регистрация: 17.08.2013
Сообщений: 287
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
ADUCM360 и RS485
Подскажите, кто ни будь приделывал RS485 к ADUCM360?
Сейчас посмотрел проект ADI СN0359.
Ну он, как оказалось, странно заточен под Ардуино, хотя обычно у ADI все бывает под Кейл. Точнее, раньше так было - времена меняются.
И судя по всему, в том примере нет исходников той части где производится обработка прерывания во время работы UART с RS485. Или я не нашел. На форуме ADI люди спрашивали - их куда то послали "почитать".
Где бы посмотреть как работает железо UART ADUCM360 в режиме RS485?
|
|
|
|
08.07.2021, 11:21
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 664
Сказал спасибо: 360
Сказали Спасибо 743 раз(а) в 353 сообщении(ях)
|
Re: ADUCM360 и RS485
Сам микроконтроллер описан в документе Hardware User Guide UG-367
|
|
|
|
08.07.2021, 12:05
|
|
Прописка
Регистрация: 17.08.2013
Сообщений: 287
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: ADUCM360 и RS485
По вашей ссылке на странице 143 написано:
Word lengs select bits.
00: 5 bits
01: 6 bits
10: 7 bits
11: 8 bits
Как видим нет 9 бит режима.
Но стандартный режим UART подразумевает быть мультипроцессорному режиму - во многих приложениях это используется: RS232, CAN, RS485 и т.д. и т.п.
Так не бывает, что бы не было режима 9 бит. Да и в железке CN0359 благополучно применяется. Значит как то по другому это реализуется - но как?
Ну вот по аналогии пример приведу из даташита на МК Силабса:
https://www.silabs.com/documents/pub.../C8051F34x.pdf
На странице 209 изображен мультипроцессорный режим работы UART.
Figure 18.6. UART Multi-Processor Mode Interconnect Diagram
Тут у них английским языком написано как работает типовой режим UART - на базе этого и работает RS485.
|
|
|
|
08.07.2021, 18:25
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,312
Сказал спасибо: 173
Сказали Спасибо 3,112 раз(а) в 2,006 сообщении(ях)
|
Re: ADUCM360 и RS485
Сообщение от optical illusion
|
судя по всему, в том примере нет исходников той части где производится обработка прерывания во время работы UART с RS485. Или я не нашел.
|
научись программировать процы на низком уровне на си.
далее просто читаешь даташит на любой проц и кодишь что и как хочешь без всяких примеров.
я вот примеры смотрю только когда сложные матвычисления нужны а самому лень с нуля делать. но это вообще к железу не относится
судя по тому как ты в другой теме кодил - пока у тебя это а уровне псевдонаучного тыка.
кодить на высоком уровне простые процы это ваще шлак.
низкий это примерно вот так
Код:
|
void initUART1()
{
uart_status = 0;
rxBufferInit();
//txBufferInit();
USART1-›CR1 = USART_CR1_UE;
USART1-›BRR = 48000000/900000;
USART1-›CR2 = 0;
USART1-›CR3 = USART_CR3_DMAT | USART_CR3_DMAR;
USART1-›CR1 |= USART_CR1_TE | USART_CR1_RE ; //|USART_CR1_TCIE; //Âêëþ÷àåì USART
USART1-›ISR = 0;
//USART1-›CR1 |= USART_CR1_RE|USART_CR1_RXNEIE;
//NVIC_EnableIRQ (USART1_IRQn); //ðàçðåøèòü ïðåðûâàíèÿ îò USART1
//NVIC_EnableIRQ(DMA1_Channel4_5_IRQn);
// rx dma ring
DMA1_Channel3-›CCR = 0;
DMA1_Channel3-›CPAR = (uint32_t)&USART1-›RDR;
DMA1_Channel3-›CMAR = (uint32_t)rxbuffer;
DMA1_Channel3-›CNDTR = UART_BUFFER_SIZE;
DMA1_Channel3-›CCR = DMA_CCR_MINC | DMA_CCR_CIRC | DMA_CCR_PL_1| DMA_MemoryDataSize_Byte| DMA_PeripheralDataSize_Byte;// | DMA_CCR_TCIE;
DMA1_Channel3-›CCR |= DMA_CCR_EN;
}
а когда совсем лень много читать (чо там в хедерах поналяпали индусы
то вообще вот так
RCC-›AHBENR = 1|(1‹‹6)|(1‹‹17)|(1‹‹18)|(1‹‹19)|(1‹‹20)|(1‹‹22); // DMA,PORTS POWER ON
RCC-›APB2ENR = (1‹‹9)|(1‹‹14)|(1‹‹16); //ADC, USART1, TIM15
RCC-›APB1ENR = (1‹‹1)|(1‹‹8)|(1‹‹17)|(1‹‹21)|(1‹‹28); // TIM3, USART2, I2C1, PWREN
RCC-›APB2ENR |= RCC_APB2ENR_SYSCFGEN;
GPIOA-›MODER |= 1|(1‹‹ 2)|(1‹‹ 5)|(1‹‹ 7)|(1‹‹19 )|(1‹‹21) |(1‹‹8)|(1‹‹9)|(1‹‹10)|(1‹‹11 )|(1‹‹12)|(1‹‹13); //
GPIOA-›AFR[0] = (1‹‹8)|(1‹‹12); //usart tx rx,
GPIOA-›AFR[1] = (1‹‹4)|(1‹‹8); //usart tx rx
GPIOA-›OSPEEDR = 0xffff ;
GPIOA-›PUPDR |= (1‹‹4)|(1‹‹6)|(1‹‹14);
GPIOA-›OTYPER = (1‹‹7); |
__________________
ОГМ/ПОГМ
Последний раз редактировалось mike-y-k; 03.10.2022 в 10:53.
|
|
|
|
09.07.2021, 09:56
|
|
Прописка
Регистрация: 17.08.2013
Сообщений: 287
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
индюк Возможно, то что вы пишите тоже интересно, но это другая тема.
Посмотрел демо пример RS485 для STM32.
Код:
|
#define DIR485_H GPIOD-›BSRR=1‹‹7
#define DIR485_L GPIOD-›BRR=1‹‹7
void UART_Write(u8* data,u16 len)
{
u16 i;
DIR485_H ;
for (i=0; i‹len; i++)
{
UART_SendByte(data[i]);
}
Delay10us(1000);
DIR485_L;
} |
В общем и целом понятно, но не понятно также называются регистры GPIOD-›BSRR и GPIOD-›BRR.
Подскажите, если ядро Cortex-M3 (у разных чипов) то названия все одинаковые регистров?
Как подобрать аналогичный регистр в другом чипе?
Последний раз редактировалось mike-y-k; 03.10.2022 в 10:52.
Причина: 6.6
|
|
|
|
09.07.2021, 12:46
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 664
Сказал спасибо: 360
Сказали Спасибо 743 раз(а) в 353 сообщении(ях)
|
Re: ADUCM360 и RS485
Одинаковые ядра устроены с точностью до одинаково
А вот насчёт периферии..
Как производитель реализует периферию и назовёт регистры управления оной - так и будет (да будет так! Аминь )
В частности, для ADuCM360/ADuCM361:
- в документе UG-367 в разделе GPIO MEMORY MAPPED REGISTERS (стр 104) описаны регистры управления портами ввода-вывода;
- в заголовочном файле ADuCM360.h в дебрях CMSIS от производителя можно увидеть, как расписаны регистры периферии и их битовые поля;
- в проектах-примерах можно посмотреть, как ведётся работа с регистрами периферии.
Во вложении - файл ADuCM360.h, переименованный в *.txt
ADuCM360.txt
P. S.
Это беглый взгляд; никогда не приходилось сталкиваться с этими МК.
|
|
|
|
09.07.2021, 14:14
|
|
Прописка
Регистрация: 17.08.2013
Сообщений: 287
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: ADUCM360 и RS485
Ну вот, например, в проекте-примере CN0359 (Analog Devices), то место которое меня интересует находится в закрытом классе. Вопрос в том - а почему это так?
Код:
|
#ifndef __ADDRESSDIALOG_H__
#define __ADDRESSDIALOG_H__
#include ‹applications/dialog/Dialog.h›
#include ‹hal/drivers/flash.h›
class CAddressDialog: public CDialog
{
public:
virtual void OnCreat(void);
virtual void OnEncoderCW(void);
virtual void OnEncoderCCW(void);
virtual void OnButtonDown(void);
private:
void OnDraw(void);
decltype(flash_file::rs485_address) address;
enum
{
adr, save, cancel
} menu_item;
bool in_edit;
};
extern CAddressDialog AddressDialog; |
Последний раз редактировалось mike-y-k; 03.10.2022 в 10:54.
|
|
|
|
09.07.2021, 15:04
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,312
Сказал спасибо: 173
Сказали Спасибо 3,112 раз(а) в 2,006 сообщении(ях)
|
Re: ADUCM360 и RS485
Сообщение от optical illusion
|
В общем и целом понятно, но не понятно также называются регистры GPIOD-›BSRR и GPIOD-›BRR.
|
мля)) еще раз говорю - изучи строение проца снизу!!
это тупо регистр который сбрасывает и ставит биты в порте. к 485 он вообще никакого отношения не имеет. равно как и уарт тупо там работает как ком порт.
__________________
ОГМ/ПОГМ
|
|
|
|
09.07.2021, 16:02
|
|
Прописка
Регистрация: 17.08.2013
Сообщений: 287
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: ADUCM360 и RS485
Если бы все было просто, как вы говорите тут, то не было бы нужды ADI засовывать этот кусок кода в приватный класс. Что бы изучать "процы снизу" - нужны доки. Того что есть в UG-367 недостаточно, что бы сделать обработчик прерывания UART в 9 битовом мультипроцессорном режиме.
|
|
|
|
09.07.2021, 16:47
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 664
Сказал спасибо: 360
Сказали Спасибо 743 раз(а) в 353 сообщении(ях)
|
Re: ADUCM360 и RS485
Сообщение от optical illusion
|
Или я не нашел.
|
Если не ошибаюсь, вся низкоуровневая работа с UART сосредоточена в файле source\hal\drivers\uart.cpp, там есть и некий UART_Int_Handler.
А откуда уверенность, что именно 9-битный режим?
Сообщение от optical illusion
|
странно заточен под Ардуино
|
Может, в некоей версии под Ардуино ( если таковая версия существует ) и сделано по-ардуински - блокирующим ногодрыгом?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:44.
|
|