Перейти к содержанию
    

Ilya26

Участник
  • Постов

    7
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Посетители профиля

311 просмотр профиля
  1. Благодарю за ценную мысль, пересмотрел взгляды на задачу и все получилось! :08: Ниже фрагмент кода, если вдруг кому понадобиться: if(XMC_UART_CH_GetStatusFlag(XMC_UART0_CH1) & XMC_UART_CH_STATUS_FLAG_RECEIVER_START_INDICATION) { ReceiveData = XMC_UART_CH_GetReceivedData(XMC_UART0_CH1); while(!XMC_UART_CH_STATUS_FLAG_RECEIVE_FRAME_FINISHED); XMC_UART_CH_ClearStatusFlag(XMC_UART0_CH1, XMC_UART_CH_STATUS_FLAG_RECEIVER_START_INDICATION); } if(ReceiveData == 0x01){ MANCHESTER_SW_0.encoder->status = 0U; MANCHESTER_SW_0.encoder->data = ReceiveData; MANCHESTER_SW_Encode(&MANCHESTER_SW_0); temp1 = MANCHESTER_SW_0.encoder->status; while(MANCHESTER_SW_0.encoder->status != 1); ReceiveData = 0xFF; XMC_UART_CH_Transmit(XMC_UART0_CH1, ReceiveData); } Повторюсь, использую библиотеку XMC. Конечно, каждый "развлекается" как хочет, но меня совершенно не улыбает штудировать юзер манул и использовать предложенную мнемонику, вместо человеческого языка предложенного производителем в их библиотеке (хотя и есть у меня к ним притенении). Хотя Вы правы, в мануале действительно ни чего подобного как MANCHESTER_SW нет. MANCHESTER_SW - это, я так понял основа для надстройки DALI, DMX512,SPI... Вот что пишет об этом элементе сам производитель:
  2. Заставляет работодатель, а в мануале примеры под 3 DAVE, сейчас DAVE 4, и как достать 3 ветку легально я не знаю (борьба с пиратством, так сказать)... по этому примеры отпадают хоть и не полностью, но многое приходится додумывать самому. Так же в ответ про мануал: в юзер-мануле ни строчки не сказано о такой загадочной "вещицы" как MANCHIESTER. О этой "вещицы", которая является основой для надстройки к DALI, DMX512..., я узнал только благодаря глубокому ковырянию кодов и примеров для DAVE 3, который, как было сказано ранее, структурно и функционально (написанный код структур и функций) различаются. Нет, несомненно есть общие точки соприкосновения, но далеко не все ясно. И да , я бы тоже подождал, если бы вопрос хотя бы опубликовали, а то ждите рассмотрения "Администрации форума" на публикацию. Ейбогу как флудеру какому-то. Ладно, это все лирика... от темы отошли, пойду дальше UART ковырять
  3. да я 3 раза пытался задать там вопрос, и натыкался на банер "как только наш админ модератор одобрит мы разместим". Если честно, форум infineona очень медленный, не в какое сравнение с этим или скажем с форумом Миландра, но к сожалению приходится работать с infineon-ом и их УЖАСНОЙ библиотекой периферии. Вся эта затея с обменом по УАРТ и передачей далее через MANCHIESTER из-за банального отсутствия, а вернее сказать обмана производителя :maniac: в наличии готовой "DALI" библиотеки. Ее просто нет, а MANCHIESTER - это та штука на основе которой в 3 ветки DAVE-а была написана эта самая библиотека. По этому пытаюсь написать ее с нуля, а взаимодействие с UART нужно для отработки да и мастер управления DALI все равно нужен. :twak:
  4. так, по моему не там я проблему ищу, а надо ее искать непосредственно в UART :fman: . Дело в том что: ReceiveData = XMC_UART_CH_GetReceivedData(XMC_UART0_CH1); данной строчкой мы читаем пришедшее по UART всяку бяку данные и вот не задача: while(1){ ReceiveData = XMC_UART_CH_GetReceivedData(XMC_UART0_CH1); if(ReceiveData == 0x01){ MANCHESTER_SW_0.encoder->status = 0U; MANCHESTER_SW_0.encoder->data = ReceiveData; MANCHESTER_SW_Encode(&MANCHESTER_SW_0); temp1 = MANCHESTER_SW_0.encoder->status; while(MANCHESTER_SW_0.encoder->status != 1); ReceiveData = 0xFF; XMC_UART_CH_Transmit(XMC_UART0_CH1, ReceiveData); } } как только код проходит первый цыкал и возвращается к строчки ReceiveData = XMC_UART_CH_GetReceivedData(XMC_UART0_CH1); , о чудо я наблюдаю, что забирается прошлое значение, т.е. я делаю вывод что после прочтения данных, данные остаются в RX буфере, который я не создавал. Скорей всего предусмотренным производителем. Следовательно его как-то надо очищать! Чтож, продолжу свои изыскания, будут мысли как почистить UART RX пишите, не стесняйтесь. Буду рад любой помощи! :smile3046:
  5. Так, стабильно получать и обрабатывать данные вроде получилось, но посылки MANCHESTER_SW все равно бесконечные... :krapula: ... ReceiveData = XMC_UART_CH_GetReceivedData(XMC_UART0_CH1); if(ReceiveData == 0x0001){ MANCHESTER_SW_0.encoder->status = 0U; //<--добавил обновление статуса, как оказалось после прохождения while(MANCHESTER_SW_0.encoder->status != 1); статус оставался 1 MANCHESTER_SW_0.encoder->data = ReceiveData; MANCHESTER_SW_Encode(&MANCHESTER_SW_0); temp1 = MANCHESTER_SW_0.encoder->status; while(MANCHESTER_SW_0.encoder->status != 1); } ReceiveData = 0; XMC_UART_CH_Transmit(XMC_UART0_CH1, ReceiveData); ReceiveData = 0; ...
  6. Люди добрые, помогите разобраться. Очень надеюсь что кто-нибудь из Вас работал с Infineon контроллерами. У меня же в наличии XMC1200 контроллер. Так вот вопрос по программированию периферии данного контроллера: Как сделать что бы MANCHESTER_SW_0 отправлял одну посылку данных по приему с UART данных, например 0х01? В нижеприведенном коде посылка отправляется постоянно, при повторной посылки по UART команды 0х01, MANCHESTER_SW_0 перестает пересылать и вообще реагировать "на внешний раздражитель" UART. #include <DAVE.h> //Declarations from DAVE Code Generation (includes SFR declaration) #include <xmc_uart.h> #define UART_RX P1_3 #define UART_TX P1_2 uint16_t ReceiveData = 0; /* Pins configuration */ XMC_GPIO_CONFIG_t uart_tx; XMC_GPIO_CONFIG_t uart_rx; /* UART configuration */ const XMC_UART_CH_CONFIG_t uart_config = { .data_bits = 8U, .stop_bits = 1U, .baudrate = 9600 }; /** * @brief main() - Application entry point * * <b>Details of function</b><br> * This routine is the application entry point. It is invoked by the device startup code. It is responsible for * invoking the APP initialization dispatcher routine - DAVE_Init() and hosting the place-holder for user application * code. */ int main(void) { DAVE_STATUS_t status; status = DAVE_Init(); /* Initialization of DAVE APPs */ uart_tx.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT7; uart_rx.mode = XMC_GPIO_MODE_INPUT_TRISTATE; //led.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL; /* Configure UART channel */ XMC_UART_CH_Init(XMC_UART0_CH1, &uart_config); XMC_UART_CH_SetInputSource(XMC_UART0_CH1, XMC_UART_CH_INPUT_RXD,USIC0_C1_DX0_P1_3); /* Start UART channel */ XMC_UART_CH_Start(XMC_UART0_CH1); /* Configure pins */ XMC_GPIO_Init(UART_TX, &uart_tx); XMC_GPIO_Init(UART_RX, &uart_rx); //NVIC_SetPriority(USIC0_1_IRQn,3U); //NVIC_EnableIRQ(USIC0_1_IRQn); if(status != DAVE_STATUS_SUCCESS) { /* Placeholder for error handler code. The while loop below can be replaced with an user error handler. */ XMC_DEBUG("DAVE APPs initialization failed\n"); while(1U) { } } /* Placeholder for user application code. The while loop below can be replaced with user application code. */ uint32_t temp1 = 0; while(1U) { ReceiveData = XMC_UART_CH_GetReceivedData(XMC_UART0_CH1); if(ReceiveData == 1){ MANCHESTER_SW_0.encoder->data = ReceiveData; MANCHESTER_SW_Encode(&MANCHESTER_SW_0); temp1 = MANCHESTER_SW_0.encoder->status; while(MANCHESTER_SW_0.encoder->status != 1); } ReceiveData = 0; XMC_UART_CH_Transmit(XMC_UART0_CH1, ReceiveData); ReceiveData = 0; } }
  7. Доброго Вам времени суток. У меня такой вопрос: Как в DAVE 4 работать с протоколом DALI? На оф сайте скачал библиотеку GUI configurable software/APIs using XMC™ Lib, в описании которой сказано, что поддерживает DALI, но по факту я не нашел библиотеки отвечающий за данный протокол. При создании проекта (Dave Apps) можно выбрать DIM компонент в котором сказано: DIM_BCCU APP configures the dimming engine registers of the Brightness and Color Control Unit (BCCU). It also provides dynamic APIs to high level APPs such as DALI_CG and PDM_DIMMED_LED_LAMP. но саму конфигурацию и инициализацию для DALI где брать?
×
×
  • Создать...