Начинаю осваивать 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++; } }
|