打印

2368的板子做了,现逐步增加调试记录,盼望高手指点小菜

[复制链接]
1605|4
手机看帖
扫描二维码
随时随地手机跟帖
沙发
formatC|  楼主 | 2008-5-27 06:26 | 只看该作者

上个菜图,第一次正式打样做板,别笑俺弱智啊

使用特权

评论回复
板凳
formatC|  楼主 | 2008-5-27 08:20 | 只看该作者

原理如请搜索旧贴

板子是手工焊的,很难看哈
sheet 1:  2368 core
sheet 2:  emac and power supply
sheet 3:  Audio codec and SD
sheet 4:  UART & I2C & SPI & CAN
sheet 5:  Interface and CSTN

使用特权

评论回复
地板
formatC|  楼主 | 2008-6-4 08:59 | 只看该作者

上传系统配置程序

系统配置文件,设置系统PLL工作频率, MAM设置, VIC配置

/*
********************************************************************************
system config files
config PLL, MAM, and VIC
********************************************************************************
*/
#include  <includes.h>

/*
********************************************************************************
name: Config_Clock
desc: config the system clock
pars: clksrc, fosc, clk
rets: err
********************************************************************************
*/
INT8U Config_Clock(CLKSEL clksrc, INT32U fosc, INT32U clk)
{
  INT16U  i;
  INT32U  clkdiv;
  if(clk>F72MHZ || fosc>F50MHZ)
    return  0;
  //STEP 1  
  
  PLLCON_bit.PLLC = 0;
  PLLFEED = 0xAA;
  PLLFEED = 0x55;
  SCS |= 0x20;
  //while( !(SCS & 0x40) );
  //STEP 2
  PLLCON_bit.PLLE = 0;
  PLLFEED = 0xAA;
  PLLFEED = 0x55;
  //STEP 3
  switch  (clksrc)
  {
  case  RC:
    CLKSRCSEL_bit.CLKSRC = RC;
    break;
  case  OSC:
    CLKSRCSEL_bit.CLKSRC = OSC;
    break;
  case  RTC:
    CLKSRCSEL_bit.CLKSRC = RTC;
    break;
  default: return 0;  
  }
  //STEP 5, assume N=1
  for(i=6;i<513;i++)
  {
    clkdiv = (fosc*(i+1)*2)%clk;
    if(clkdiv==0)
    {
      clkdiv = (fosc*(i+1)*2)/clk;
      if(clkdiv%2==0)
        break;
    }
    if(i==514)
      return 0;
  }
  PLLCFG_bit.MSEL = i;
  PLLCFG_bit.NSEL = 0;
  PLLFEED = 0xAA;
  PLLFEED = 0x55;
  //STEP 6
  PLLCON_bit.PLLE = 1;
  PLLFEED = 0xAA;
  PLLFEED = 0x55;
  //STEP 7
  CCLKCFG = clkdiv-1;
  //STEP 8
  //while(PLLSTAT_bit.PLOCK!=1);
  //STEP 9
  PLLCON_bit.PLLC = 1;
  PLLFEED = 0xAA;
  PLLFEED = 0x55;
  
  return 1;
}
/*
*******************************************************************************
name: Periphperal_On
desc: enable or disable the peripherals to save power
pars: peri
rets: no
*******************************************************************************/
void  Peripheral_On(INT32U peri)
{
  PCONP |= 1<<peri;  
  
}
void  Peripheral_Off(INT32U peri)
{
  PCONP &= ~(1<<peri);
}
/*
********************************************************************************
name: MAM_Config
desc: config memory accelerator functions
pars: no
rets: no
*******************************************************************************
*/
void  MAM_Config(INT32U clk)
{
  //disable Memory acceleratolr
  MAMCR_bit.MODECTRL = 0;
  if(clk<F20MHZ)
    MAMTIM_bit.CYCLES = 1;
  else if(clk>F20MHZ && clk<F40MHZ)
    MAMTIM_bit.CYCLES = 2;
  else if(clk>F40MHZ)
    MAMTIM_bit.CYCLES = 3;
  //MAM REG must be disable first
  MAMCR_bit.MODECTRL= 2;
}
/*
******************************************************************************
name: VIC_Config
desc: config the interrupt mode
pars:
rets: no
******************************************************************************
*/

void  VIC_Config(INT8U Mode, INT32U  IntNum, INT8U  slot, INT32U  ISRAddr)
{
  INT32U * pADR;
  
  if(Mode==2)
    VICINTSELECT |= 1<<IntNum;          //config as FIQ
  if(Mode==1)                           //config as IRQ
  {
      pADR = (INT32U *)(BaseIRQPRO + 4*IntNum);
      * pADR &= slot;                 
      pADR = (INT32U*)(BaseVECTADDR + 4*IntNum);
      * pADR = ISRAddr;
  }
  
/*#if   SIMULATOR_EN
  VICADDRESS = *pADR;
#endif    */
}
/*
******************************************************************************
name:   GetFIQStatus
desc:   get the status regiter of the FIQ interrupt
pars:   no
rets:   status
*******************************************************************************
*/
INT32U  GetFIQStatus(void)
{
  return  VICFIQSTATUS; 
}
/*
*******************************************************************************
name:   VIC_Enable
desc:   according to the interrupt channel enable the related Interrupt source
pars:   IntChnl
rets:   no
*******************************************************************************
*/
void  VIC_Enable(INT32U IntNum)
{
  VICINTENABLE |= 1<<IntNum; 
  
}
//disable interrupt
void  VIC_SrcDisable(INT32U  IntNum)
{
  //VICIntEnable &= ~(1<<IntNum);
  VICINTENCLEAR |= 1<<IntNum;  
}

使用特权

评论回复
5
formatC|  楼主 | 2008-6-4 09:03 | 只看该作者

移植UCOS建立一个toggle LED的任务

/*
******************************************************************************
Include header files
******************************************************************************
*/
#include  <includes.h>

/*
*******************************************************************************
function protypes
*******************************************************************************
*/


/*
*******************************************************************************
Global varibles
*******************************************************************************
*/
static  OS_STK  Task_StartStk[Task_StartStk_Size];


void   main(void)
{
  Initial_Board();
  OSInit();
  OSTaskCreateExt(Task_Start, 
                  (void *)0, 
                  (OS_STK *)&Task_StartStk[Task_StartStk_Size-1],
                  Task_StartPrio,
                  Task_StartPrio,
                  (OS_STK *)&Task_StartStk[0],
                  Task_StartStk_Size,
                  (void *)0,
                  OS_TASK_OPT_NONE);
                    
  OSStart(); 

}
/*
*****************************************************************************
name:   TaskStart
decs:   initial the os clock tick and Perform task function
pars:   no
rets:   no
******************************************************************************
*/
void  Task_Start(void * pdata)
{
  VIC_Enable(IntTimer0);
  Timer_EnDisable(TIMER0, 1);
  OSStatInit();  
  //Create_Tasks();
  while(1)
  {
    LED1_On;
    OSTimeDly(500);
    LED1_Off;
    OSTimeDly(500);
  }  


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

101

帖子

0

粉丝