Board logo

标题: Blackfin 531 [打印本页]

作者: weicheichei    时间: 2011-3-3 11:18     标题: Blackfin 531

我用531定时器中断写的程序可以编译过但是运行不正常,大家帮忙看下。
// 头文件包含
#include <ccblkfn.h>
#include <cdefBF531.h>
#include <sysreg.h>
#include <sys\exception.h>
// LED操作地址定义
#define pLed   (volatile unsigned char *)0x203D0000
#define pSEG_8_0  (volatile unsigned char *)0x203C4000
#define pSEG_8_1  (volatile unsigned char *)0x203CC000
#define pSEG_8_2  (volatile unsigned char *)0x203C8000
#define pSEG_8_3  (volatile unsigned char *)0x203C0000
// 宏定义

// 常量定义
const unsigned char NumberData[13] = {
           0x24, 0x7D, 0x16, 0x54, 0x4D, 0xC4, 0x84, 0x75, 0x04, 0x44, 0xFB,
        //    0     1     2     3     4     5     6     7     8     9     .
     0x00, 0xFF};
     // 全亮  全灭
unsigned int i=0,j,m,n,Dings=0;
int led = 0x01;

/********************************************************
*
* 函数名        : Init_PLL
* 函数功能      : 初始化配置BF531的PLL寄存器
* 函数输入参数  : 无
* 函数输出      : 无
* 说明          : 无
*
********************************************************/
void Init_PLL(void)
{
sysreg_write(reg_SYSCFG, 0x32); //Initialize System Configuration Register
   
*pSIC_IWR = 0x0101;    // Enable only PLL wakeup interrupt

*pPLL_CTL = 0x0200;    // MSEL is 14, which gives: VCO of 378 MHz (27*14=378)

*pPLL_DIV = 0x0003;    // SSEL is 3, which gives: SCLK of 126 MHz (378/3=126)
         // CSEL is 0, which gives: CCLK of 378 MHz (378/1=378)
ssync();

idle();
}
      
/********************************************************
*
* 函数名        : Delay
* 函数功能      : 延时
* 函数输入参数  : 时长参数
* 函数输出      : 无
* 说明          : 无
*
********************************************************/     
void Delay(unsigned long time)
{
    unsigned long i,j;
    for(i=0; i<time; i++)
    for(j=0; j<10; j++)
    {;}
}
/********************************************************
*
* 函数名        : Init_EBIU
* 函数功能      : 配置BF531的EBIU
* 函数输入参数  : 无
* 函数输出      : 无
* 说明          : 无
*
********************************************************/
void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7BB07BB0;//<--|Write access time = 7 cycles, read access time = 11 cycles, no ARDY
*pEBIU_AMBCTL1 = 0x7BB07BB0;//   |Hold time = 2 cycles, setup time = 3 cycles, transition time = 4 cycles
*pEBIU_AMGCTL = 0x000F ;//   |Enable all memory banks
}
void Init_TIMER(void)
{
*pTIMER0_CONFIG  = 0x001A;
*pTIMER0_PERIOD  = 0x007FFFFF;
*pTIMER0_WIDTH  = 0x00400000;
*pTIMER_ENABLE  = 0x0001;
//register_handler(ik_ivg11, Timer0_ISR);
}
EX_INTERRUPT_HANDLER(Timer0_ISR)
{printf("789");
  Dings++;
  if(Dings==9999)
  {
   *pTIMER_ENABLE= 0x0000;
   i=Dings;
      *pSEG_8_3 = NumberData[i/1000];
      Delay(0x99999);
   j = (i%1000)/100;
   *pSEG_8_2 =  NumberData[j];
   Delay(0x99999);
   j = (i%100)/10;
   *pSEG_8_1 =  NumberData[j];
   Delay(0x99999);
   j = i%10;
   *pSEG_8_0 =  NumberData[j];
   Delay(0x99999);
   Delay(0x2000);
   if((led = led << 1) == 0x100) led = 0x01;
   *pLed = ~led;
   Delay(0x200);
  
}
}
void Init_Interrupts(void)
{
    *pSIC_IAR0 = 0xFFFFFFFF;
   
*pSIC_IAR1 = 0xFFFFFFFF;

*pSIC_IAR2 = 0xFFFFFFF4;   

register_handler(ik_ivg11, Timer0_ISR);
  
printf("456\n");
}
/********************************************************
*
* 函数名        : main
* 函数功能      : 测试数码管和LED显示
* 函数输入参数  : 无
* 函数输出      : 无
* 说明          : 无
*
********************************************************/
void main(void)
{   
Init_PLL();
Init_EBIU();
Init_Interrupts();
Init_TIMER();
    while(1);

}
作者: emlinix    时间: 2011-3-3 13:28

嵌入式Linux
工控主板
工控板
ARM9主板
嵌入式主板
英利电子
www.emlinix.com




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0