📄 main.c
字号:
#include <services/services.h>
#include "../../i2c/src/i2c_framing_layer.h"
#include "../../gpioconfig.h"
#if defined (__ADSPBF533__)
#include "../../bf533/gpio_global.h"
#elif defined (__ADSPBF537__)
#include "../../bf537/gpio_global.h"
#elif defined (__ADSPBF561__)
#include "../../bf561/gpio_global.h"
#endif
#define CLKIN 25000000
#if defined (__ADSPBF533__)
#define SIGNAL_ALIVE_LED _PF8
#elif defined (__ADSPBF537__)
#define SIGNAL_ALIVE_LED _PG11
#elif defined (__ADSPBF561__)
#define SIGNAL_ALIVE_LED _PF43
#endif
/************ Prototypes of external Functions *************/
void InitVideoExample( void );
/***********************************************************/
#ifdef __ADSPBF561__
//Second core has to be in IDLE mode during execution of this function
char DPM_SetDspClocks(unsigned long coreclk, unsigned long systemclk, unsigned long clkin) {
unsigned short msel, ssel, nImask;
msel = (unsigned short)(coreclk / clkin); //msel = VCO / CLKIN
ssel = (unsigned short)((clkin * msel) / systemclk); //ssel = VCO / SCLK
msel = msel << 9;
//csel=0: CCLK = VCO
asm("cli r0; \
%0 = r0;"
:"=d"(nImask)
:
:"r0");
*pSICA_IWR0 |= 0x1; //Enable PLL-interrupt to wakeup processor from idle-mode.
*pPLL_DIV = ssel;
*pPLL_CTL = msel;
//PLL Programming sequence to lock the pll.
asm ("r0 = %0; \
idle; \
sti r0;"
:
:"d"(nImask)
:"r0");
return (0);
}
#elif defined( __ADSPBF533__ ) || defined( __ADSPBF537__ )
// function for setting the clock divider
void DPM_SetDspClocks(unsigned long coreclk, unsigned long systemclk,
unsigned long clkin) {
unsigned short msel, ssel, imask;
msel = (unsigned short)((float)coreclk / (float)clkin);
ssel = (unsigned short)((float)(clkin * msel) / (float)systemclk);
asm("cli r0; \
%0 = r0;"
:"=d"(imask)
:
:"r0"); // IMASK bitpattern saved in "imask".
*pSIC_IWR |= 0x1; // enable pll-interrupt to wakeup processor from idle-mode.
*pPLL_DIV = ssel;
msel = msel << 9;
*pPLL_CTL = msel;
// pll programming sequence.
asm ("r0 = %0; \
idle; \
sti r0;"
:
:"d"(imask)
:"r0");
}
#endif
char adi_int_working_buffer[ 7 * ADI_INT_SECONDARY_MEMORY ];
int main()
{
DPM_SetDspClocks(525000000, 131250000, CLKIN);
*pEBIU_AMGCTL |= 1 << 8; //Gives DMA memory access priority over CPU
u32 max_entries;
adi_int_Init( adi_int_working_buffer,
sizeof(adi_int_working_buffer),
&max_entries,
NULL ); //initialize interrupt manager used by i2c driver
#if defined( __ADSPBF533__ )
I2CInit( 100000, 4, 7, 1, 131250000 ); //100kbit; PF4 is SCL; PF7 is SDA; uses timer 1
#elif defined( __ADSPBF561__ )
I2CInit( 100000, 10, 9, 1, 131250000 ); //100kbit; PF10 is SCL; PF9 is SDA; uses timer 1
#elif defined( __ADSPBF534__ ) || defined( __ADSPBF537__ )
I2CInit( 100000, 131250000 ); //100kbit
#endif
InitVideoExample(); //See the video_example.c file for details
unsigned long wait;
gpio_becomeOutput(SIGNAL_ALIVE_LED);
while( !0 ) {
gpio_toggle(SIGNAL_ALIVE_LED);
for (wait=0; wait<0x1fffff; wait++);
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -