⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 BlackFin处理器视频演示代码
💻 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 + -