реклама на сайте
подробности

 
 
> работа UART процессора BF533
badik
сообщение Aug 6 2007, 04:36
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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++;
}
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
bychkov_vladimir
сообщение Aug 6 2007, 12:20
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 106
Регистрация: 1-06-05
Из: Подольск
Пользователь №: 5 629



предлагаю попробывать Вам работу с прерыванием и чтением данных по UART
c помощью стандартной ВиН.програмы HypTerminal. Это довольно наглядно и просто, чем ждать пока мигнет светодиод и думать правильно ли процессор обработал прерывание. Работу с ним Вы сможите добавить в любое время.

что просто и как проше с чего начать. Я смотрю Вы сначала пытаетесь задать частоту ядра и периферии.
Давайте пока это опустим. После сброса процессора частота периферии станет в 118 МГц. (с Вашим кварцем на борту).
я приведу пример - пока свежо в памяти недавно сам с этим работал.
1.) инициализация порта.
#include <cdefbf533.h>
#include <signal.h>
#include <stdio.h>
#include <sys/exception.h>
#include <sys/excause.h>
char welcomemessage[] = {"\fHello! \n\r"
"Initialization UART comlete ! BlackFIN module UART work\n\r"} ;
void Init_Uart()
{
unsigned long divisor ; // --- значение делителя DIVIsOR ---
unsigned char msel ; // --- значение коефф. умножения MSEL[5:0]
// --- регистра PLL_CTL[14:9] ---
unsigned char ssel ; // --- делитель тактового сигнала системы SSEL[3:0]
// --- of PLL_DIV register[3:0]

/* Line Control Setup */
*pUART_LCR = 0x0083; // --- при разрыве соединения TX переводится в 0
// --- 8-ми битные данные, 1 стоповый бит,
// --- бит проверки не передается и не проверяется.


/* Чтение значения множителя MSEL в регистре PLL_CTL */
// --- чтение осуществляется сдвигом вправо на девять бит --- //
msel = (*pPLL_CTL)>>9 ; // Read MSEL[5:0] from PLL_CTL
msel &= 0x3F ; // Clear all bits except msel[5:0]
// --- msel после сброса равно 10 DEC -------------------------

/* Read SSEL from PLL_DIV register */
ssel = *pPLL_DIV ; // --- чтение делителя тактового сигнала системы ---
ssel &= 0x0F ; // --- присваивание с поразрядной операцией И
// --- Clear all bits except ssel[3:0]
// --- ssel после сброса равен 5 DEC ----------------------------
/* divisor calculation:
* SCLK = (msel * CLKIN)/ssel if DF = 0 // --- формула по расчету частоты периферии
* SCLK = (msel * CLKIN/2)/ssel if DF = 1
* divisor = SCLK/(16 * BAUD_RATE)
*/
divisor = ((msel * CLKIN)/(ssel * 16 * BAUD_RATE)); // --- 29 ----

if(*pPLL_CTL & 0x1) // If DF = 1, CLKIN/2 is going to PLL
{
divisor /= 2; // Divide by 2
}

/* Baud Rate Setup: 115.2 Kbps */
// --- разрешение доступа к регистрам UART_DLL и UART_DLH ----

*pUART_LCR |= DLAB; // Enable Divisor Latch Access
*pUART_DLL = divisor;
ssync();
*pUART_DLH = (divisor>>8);
ssync();
// --- Доступ к буферным регистрам приема и передачи ----------
// --- изменение 1 на 0 ---------------------------------------
*pUART_LCR &= ~DLAB;// Disable Divisor Latch Access
ssync();
*pUART_GCTL = UCEN; /*UART Clock enable*/
ssync();

// --- вывод гостевого приглашения в терминальную программу ---
char temp ;
int Size ;
int i ;
Size = sizeof(welcomemessage) ;
for ( i=0 ; i<Size ; i++)
{
// ждать готовность передатчика
do {;}
while (!(*pUART_LSR & TEMT)) ; // пока сдвиговый и буферн. регистры заполнены.
*pUART_THR = welcomemessage[i] ;
input_temp = *pUART_RBR ;
}
ssync();
ssync();
// -- установка прерываний ------
// ------------------------------------------------------------
*pSIC_IAR0 = 0xffffffff ;
*pSIC_IAR1 = 0xf3ffffff ; // назначение ID 3 для приема данных по UART
*pSIC_IAR2 = 0xffffffff ;
ssync();
register_handler(ik_ivg10, UARTRx_ISR); // UART RX -> IVG 10


*pSIC_IMASK = 0x00004000;
ssync();


// --- разрешение прерывания по заполнению буфера приема ------
*pUART_IER =0x1;//Enable interrupts for receive


}

т.е. вот Вам инициализация UART и демаскирование прерывания приема .
НО ДЛЯ 9600 пересчитайте еще значение делителя.
потом в майн можно описать так

void main()
{

sysreg_write(reg_SYSCFG, 0x32); //Initialize System Configuration Register
Init_Uart();


while(1)
{
asm("nop;");
}

}

и обработчик прерывания
EX_INTERRUPT_HANDLER(UARTRx_ISR)
{

// тут можно разместить функцию по побайтовому приему данных и обратной отсылки их в
// терминальную программу. Паралельно можно моргать своим диодом на плате, только для вывода
//сделате задержку, что бы это подмигивание можно было увидеть

}
в общем пробуте и спрашивайте.
Go to the top of the page
 
+Quote Post
badik
сообщение Aug 7 2007, 11:18
Сообщение #3


Участник
*

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



Благодарю за помощь.
Я видел Ваши сообщения по RS232 на форуме, их анализировал.
Ваш пример я запустил, но есть проблема. Как я понимаю нужно плату
ADSP-BF533 EZ-Kits подцепить к COM-порту PC. Разьёмы COM EZ-Kits и PC одни и теже - "папа".
Стандартный кабель не подходит.
Программа HyperTerminal - c ней пока не общался, как то нужно задать конкретный COM-порт?
Я пока это в ней не увидел (подключение - для удалённого доступа, в свойствах есть COM1 и параметры - сама включится?).
В Ваших сообщениях видел про Кабель нуль-модемный/не нуль-модемный (2-й работал) - это как то касается меня?
С уважением
badik
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 11:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01384 секунд с 7
ELECTRONIX ©2004-2016