智能车制作

标题: ccd救助 [打印本页]

作者: 小小同学    时间: 2014-7-29 11:37
标题: ccd救助
蓝宙中的部分代码就解释
* Description: SCI0_Init
* Note: Fbus = 40M ---> Bit Rate = 115200
*********************************************************************************************************
*/
void SCI0_Init(void)
{
/*  Init_SCI init code */
  SCI0CR1 = 0x00;
  SCI0SR2 = 0x80;                      /* Switch to the alternative register set */
  SCI0ASR1 = 0x83;                     /* Clear alternative status flags */
  SCI0ACR1 = 0x00;
  SCI0ACR2 = 0x00;
  SCI0SR2 = 0x00;                      /* Switch to the normal register set */
  (void) SCI0SR1;                      /* Reset interrupt request flags */
  SCI0CR2 = 0x00;                      /* Disable error interrupts */
  SCI0BD = 0x16;                       /* Set prescaler bits */
  SCI0CR2 |= (SCI0CR2_TE_MASK | SCI0CR2_RE_MASK); /* Enable transmitter, Enable receiver */
}


/*
*********************************************************************************************************
* Description: SCI0_SendChar
*********************************************************************************************************
*/
uint8_t SCI0_SendChar(uint8_t Chr)
{
  if(SCI0SR1_TDRE == 0) {              /* Is the transmitter empty? */
    return ERR_TXFULL;                 /* If no then error */
  }
  SCI0DRL = (uint8_t)Chr;
  return ERR_OK;                       /* OK */
}


在k60中我们怎样设置

作者: chen8782186    时间: 2014-7-29 12:47
他有完整的例程的, 都不用你管, 你只需要知道是哪几个AD口即可
作者: 小小同学    时间: 2014-7-29 12:48
chen8782186 发表于 2014-7-29 12:47
他有完整的例程的, 都不用你管, 你只需要知道是哪几个AD口即可

可是我们是龙邱的ccd

作者: chen8782186    时间: 2014-7-29 12:49
一样的 。  
作者: 小小同学    时间: 2014-7-29 12:51
chen8782186 发表于 2014-7-29 12:49
一样的 。

可是移植不成功,可否指点一二

作者: chen8782186    时间: 2014-7-29 12:58
我自己板子上AD SI CLK 写成你自己的   例程上的都是他们的, 你只需要把AD SI CLK 哪几个口 是你自己用的 程序上改掉就可以了。      
作者: 小小同学    时间: 2014-7-29 13:02
chen8782186 发表于 2014-7-29 12:58
我自己板子上AD SI CLK 写成你自己的   例程上的都是他们的, 你只需要把AD SI CLK 哪几个口 是你自己用的  ...

谢过

作者: 小小同学    时间: 2014-7-30 10:33
chen8782186 发表于 2014-7-29 12:58
我自己板子上AD SI CLK 写成你自己的   例程上的都是他们的, 你只需要把AD SI CLK 哪几个口 是你自己用的  ...

大神,请问一下你的ccd时钟是怎么配置的?最好是程序举例啊,多谢

作者: chen8782186    时间: 2014-7-30 21:02

//============================================================================
//函数名称:Startintegration
//函数返回:无
//参数说明:无
//功能概要:初始化CCD第一帧
//============================================================================
void StartIntegration(void)
{
    unsigned char i;

    //CCD_SI_Change();            /* SI  = 1 */
    hw_gpio_set(CCD1_SI_PORT,CCD1_SI_PIN,1);
    delay2;
    //CCD_CLK_Change();           /* CLK = 1 */
    hw_gpio_set(CCD1_CLK_PORT,CCD1_CLK_PIN,1);
    delay2;
    //CCD_SI_Change();            /* SI  = 0 */
    hw_gpio_set(CCD1_SI_PORT,CCD1_SI_PIN,0);
    delay2;
    //CCD_CLK_Change();           /* CLK = 0 */
    hw_gpio_set(CCD1_CLK_PORT,CCD1_CLK_PIN,0);

    for(i=0; i<127; i++)
    {
        delay2;
        delay2;
        //CCD_CLK_Change();       /* CLK = 1 */
        hw_gpio_set(CCD1_CLK_PORT,CCD1_CLK_PIN,1);
        delay2;
        delay2;
        //CCD_CLK_Change();       /* CLK = 0 */
        hw_gpio_set(CCD1_CLK_PORT,CCD1_CLK_PIN,0);
    }
    delay2;
    delay2;
    //CCD_CLK_Change();           /* CLK = 1 */
    hw_gpio_set(CCD1_CLK_PORT,CCD1_CLK_PIN,1);
    delay2;
    delay2;
    //CCD_CLK_Change();           /* CLK = 0 */
    hw_gpio_set(CCD1_CLK_PORT,CCD1_CLK_PIN,0);
}

//============================================================================
//函数名称:ImageCapture
//函数返回:无
//参数说明:uint8 * ImageData CCD数据指针
//功能概要:CCD采集
//============================================================================
void ImageCapture(uint8 * ImageData)
{
    unsigned char i;
    extern uint8 AtemP ;

    //CCD_SI_Change();            /* SI  = 1 */
    hw_gpio_set(CCD1_SI_PORT,CCD1_SI_PIN,1);
    delay2;
    //CCD_CLK_Change();           /* CLK = 1 */
    hw_gpio_set(CCD1_CLK_PORT,CCD1_CLK_PIN,1);
    delay2;
    //CCD_SI_Change();             /* SI  = 0 */
    hw_gpio_set(CCD1_SI_PORT,CCD1_SI_PIN,0);
    delay2;

    //Delay 10us for sample the first pixel
    /**/
    for(i = 0; i < 50; i++)
    {
        delay2;  //200ns
    }

    //Sampling Pixel 1

    *ImageData = hw_adc_once(CCD_1_MoudelNumber,CCD_1_Channel,8);
    ImageData ++ ;
    //CCD_CLK_Change();           /* CLK = 0 */
    hw_gpio_set(CCD1_CLK_PORT,CCD1_CLK_PIN,0);

    for(i=0; i<127; i++)
    {
        delay2;
        delay2;
        //CCD_CLK_Change();       /* CLK = 1 */
        hw_gpio_set(CCD1_CLK_PORT,CCD1_CLK_PIN,1);
        delay2;
        delay2;
        //Sampling Pixel 2~128

       *ImageData = hw_adc_once(CCD_1_MoudelNumber,CCD_1_Channel,8);
        ImageData ++ ;
        //CCD_CLK_Change();       /* CLK = 0 */
        hw_gpio_set(CCD1_CLK_PORT,CCD1_CLK_PIN,0);
    }
    delay2;
    delay2;
    //CCD_CLK_Change();           /* CLK = 1 */
    hw_gpio_set(CCD1_CLK_PORT,CCD1_CLK_PIN,1);
    delay2;
    delay2;
    //CCD_CLK_Change();           /* CLK = 0 */
    hw_gpio_set(CCD1_CLK_PORT,CCD1_CLK_PIN,0);
}

hw_gpio_set(CCD1_CLK_PORT,CCD1_CLK_PIN,0);
uint8 hw_gpio_set(
    uint8 port,  //端口号。由宏定义。
    uint8 pin,   //引脚号。0~31。
    uint8 state  //引脚初始状态。1=高电平,0=低电平
)
{
    //将GPIO端口号转换成端口寄存器组指针
    GPIO_MemMapPtr pt = hw_gpio_get_pt_addr(port);
          
          if (state == 0) //控制为低电平
              GPIO_PDOR_REG(pt) &= ~(1<<pin);
          else            //控制为高电平
              GPIO_PDOR_REG(pt) |= (1<<pin);
          
    return 0;
}


作者: 小小同学    时间: 2014-7-30 21:19
chen8782186 发表于 2014-7-30 21:02
//============================================================================
//函数名称:Starti ...

谢啦





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2