|
работа UART процессора BF533 |
|
|
|
Aug 6 2007, 04:36
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 29-11-06
Из: Екатеринбург
Пользователь №: 22 890

|
Начинаю осваивать BF-533 по примерам, программы на С, использую ADSP-BF533 EZ-Kits (27MHz). Попробывал с простым примером из программ EZ-Kits - LED индикаторы, что то работает. Далее пытаюсь сделать работу процессора BF533 с последовательным портом RS232. Мне очень нужное дело. На входе GPS - раз в секунду выдаёт строку данных (GPS точно работает, со скоростью 9600). Пока просто пытаюсь убедиться, что работает UART, идут его прерывания. Для этого в прерывание UART изменение индикации LED индикаторов EZ-Kits (*pFlashA_PortB_Data), ноль имоций. Возможно неправильная инц-я UART и т.д. Навставлял где надо и ненадо (по другим примерам): ssync(); idle(); Собственно их значение мне почти не понятно
Мой пример далее - если есть возможность у опытных разработчиков?
#ifndef __Talkthrough_DEFINED #define __Talkthrough_DEFINED #include <sys\exception.h> #include <cdefBF533.h> #include <ccblkfn.h> #include <sysreg.h> void Init_Config(void); void Init_Interrupts(void); void Init_Flags(void); void Init_Flash(void);
// CLKIN frequency is 27MHz on the ADSP-BF533 EZ-Kits. #define CLKIN 27
#define BAUDRATE 9600 #define NEWLIGHT 200
// Neiaieuiua eiinoaiou // // Aa?ana aey Port B a Flash A #define pFlashA_PortB_Dir (volatile unsigned char *)0x20270007 #define pFlashA_PortB_Data (volatile unsigned char *)0x20270005
extern char aByte; extern short FlagLight; extern long int IntrId;
EX_INTERRUPT_HANDLER(UART_RX_ISR); #endif
//--------------------------------------------------------------------------//
#include "Talkthrough.h" #include "sysreg.h" #include "ccblkfn.h" #include <defBF533.h> #include <string.h> char aByte; short FlagLight=0; long int IntrId=0;
/////////////////////////////////////////////////////////////// //CLKIN is the input clock.The ADSP-BF533 EZ-Kit's CLKIN is 27MHz //This function will check what the system clock is based //on the MSEL, DF, and SSEL values in the PLL_CTL and PLL_DIV registers. /////////////////////////////////////////////////////////////// int GetSCLK() { unsigned short tempPLLCTL, tempPLLDIV; unsigned short MSEL, SSEL, DF, VCO, SCLK; unsigned short clkin = CLKIN;
tempPLLCTL = *pPLL_CTL; tempPLLDIV = *pPLL_DIV; //get MSEL, SSEL, DF MSEL = ((tempPLLCTL & 0x7E00) >> 9); SSEL = tempPLLDIV & 0x000f; DF = tempPLLCTL & 0x0001; if(DF == 1) clkin = clkin/2; VCO = MSEL * clkin; return ( VCO * 1000000 ) / SSEL; }
void main(void) { sysreg_write(reg_SYSCFG, 0x32); Init_Config(); Init_Flash(); Init_Interrupts(); while(1) {}; }
//--------------------------------------------------------------------------//
#include "Talkthrough.h"
void Init_Config(void) { unsigned long divisor=0;
*pPLL_CTL = 0x0200; // VCO = 27MHz ssync(); idle();
*pUART_LCR = 0x83; ssync(); divisor = GetSCLK() / ( 16 * BAUDRATE ); *pUART_DLL = divisor; ssync(); *pUART_DLH = divisor>>8; ssync(); *pUART_LCR = 0x03; ssync(); *pUART_GCTL = 0x01; ssync(); }
void Init_Interrupts(void) { *pUART_IER = 0x0007; *pUART_IIR = 0x0005; ssync(); *pSIC_IAR0 = 0xffffffff; *pSIC_IAR1 = 0xf3ffffff; *pSIC_IAR2 = 0xffff5fff; ssync(); register_handler(ik_ivg10, UART_RX_ISR); *pSIC_IMASK = 0x00084000; ssync(); }
void Init_Flash(void) { *pEBIU_AMBCTL0 = 0x7bb07bb0; *pEBIU_AMBCTL1 = 0x7bb07bb0; *pEBIU_AMGCTL = 0x000f; *pFlashA_PortB_Dir = 0x3f; *pFlashA_PortB_Data = 0x31; } //--------------------------------------------------------------------------//
#include "Talkthrough.h" EX_INTERRUPT_HANDLER(UART_RX_ISR) { aByte = *pUART_RBR; ssync(); if(FlagLight) { FlagLight = 0; if(IntrId > NEWLIGHT) { IntrId = 0; *pFlashA_PortB_Data = 0x10; } else IntrId++; } else { FlagLight = 1; if(IntrId > NEWLIGHT) { IntrId = 0; *pFlashA_PortB_Data = 0x21; } else IntrId++; } }
|
|
|
|
|
 |
Ответов
|
Aug 7 2007, 11:18
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 29-11-06
Из: Екатеринбург
Пользователь №: 22 890

|
Благодарю за помощь. Я видел Ваши сообщения по RS232 на форуме, их анализировал. Ваш пример я запустил, но есть проблема. Как я понимаю нужно плату ADSP-BF533 EZ-Kits подцепить к COM-порту PC. Разьёмы COM EZ-Kits и PC одни и теже - "папа". Стандартный кабель не подходит. Программа HyperTerminal - c ней пока не общался, как то нужно задать конкретный COM-порт? Я пока это в ней не увидел (подключение - для удалённого доступа, в свойствах есть COM1 и параметры - сама включится?). В Ваших сообщениях видел про Кабель нуль-модемный/не нуль-модемный (2-й работал) - это как то касается меня? С уважением badik
|
|
|
|
Сообщений в этой теме
badik работа UART процессора BF533 Aug 6 2007, 04:36 bychkov_vladimir Цитата(badik @ Aug 6 2007, 07:36) Начинаю... Aug 6 2007, 09:25 badik Цитата(bychkov_vladimir @ Aug 6 2007, 12... Aug 6 2007, 10:25 andrews Цитата(bychkov_vladimir @ Aug 6 2007, 16... Aug 7 2007, 08:46 bychkov_vladimir Давайте по порядку
кабель нужен не нуль модемный ... Aug 7 2007, 13:31 badik Ещё раз Благодарю за помощь.
Ценой усилий целого д... Aug 8 2007, 13:50 bychkov_vladimir это особенность платы .
просто там так распаяна ви... Aug 8 2007, 14:40 andrews Я при отладке моего проекта спаял кабель самостоят... Aug 9 2007, 09:17 badik Огромное Вам спасибо!
Пообщался успешно с Ter... Aug 18 2007, 11:51 andrews Что касается статей цикла, то в КиТ уже опубликова... Aug 19 2007, 14:02 badik По поводу курсов Blackfin-ов: в Питере университет... Aug 21 2007, 08:15 bychkov_vladimir давайте теперь попробую помочь Вам в Вашей работе ... Aug 24 2007, 17:39 badik Gps приемник встраиваемый (это просто чип).
Мой Gp... Aug 28 2007, 12:46  bychkov_vladimir Цитата(badik @ Aug 28 2007, 15:46) Gps пр... Sep 12 2007, 09:41   badik Благодарю за помощь.
Всётаки мой UART ADSP-BF533 E... Sep 14 2007, 09:11
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|