?? prp.c
字號:
/******************** eMMA PRP Driver********************/#include "prp.h"#include "khead.h"//// Module Basic Init//void PRP_module_init(void){//HCLK enable for eMMA _reg_CRM_PCCR0 |= 0x8008000; //bit 27 & bit 15 return;}//// PRP Module Reset//void PRP_reset(void){ _reg_EMMA_PRP_CNTL |= 0x10000; return;}//// PRP Module Enable// Unlock PRP, then enable within time limit//void PRP_enable(void){ volatile unsigned long lock; while(1) { lock = _reg_EMMA_PRP_LOCK_BIT; //unlock PRP if(!(lock & 0x1)) //wait until idle break; } _reg_EMMA_PRP_CNTL |= 0x1; //verify if(!(_reg_EMMA_PRP_CNTL & 0x1)) printk("PRP can't be unlock\n");}//// PRP Module Disable//void PRP_disable(void){ _reg_EMMA_PRP_CNTL &= ~0x1;}unsigned long PRP_poll_ch1_buf1_complete(void){ if(_reg_EMMA_PRP_INTRSTATUS & 0x40) { _reg_EMMA_PRP_INTRSTATUS = 0x40; return 1; } else return 0;}unsigned long PRP_poll_ch1_buf2_complete(void){ if(_reg_EMMA_PRP_INTRSTATUS & 0x20) { _reg_EMMA_PRP_INTRSTATUS = 0x20; return 1; } else return 0;}unsigned long PRP_poll_ch1_error(void){ if(_reg_EMMA_PRP_INTRSTATUS & 0x2) { printk("PRP ch1 write error!\n"); _reg_EMMA_PRP_INTRSTATUS = 0x2; //clear by writing '1' return 1; } else return 0;}unsigned long PRP_poll_ch2_buf1_complete(void){ if(_reg_EMMA_PRP_INTRSTATUS & 0x10) { _reg_EMMA_PRP_INTRSTATUS = 0x10; return 1; } else return 0;}unsigned long PRP_poll_ch2_buf2_complete(void){ if(_reg_EMMA_PRP_INTRSTATUS & 0x8) { _reg_EMMA_PRP_INTRSTATUS = 0x8; return 1; } else return 0;}unsigned long PRP_poll_ch2_error(void){ if(_reg_EMMA_PRP_INTRSTATUS & 0x4) { printk("PRP ch2 write error!\n"); _reg_EMMA_PRP_INTRSTATUS = 0x4; return 1; } else return 0;}///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// CSI Input : YUV422// CSI Output : QVGA RGB565 (Stride to 320 x 240)///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// PRP_init33 : 320*240 --> 320*240void PRP_init33(unsigned long rgb, unsigned long y, unsigned long u, unsigned long v){ PRP_module_init(); PRP_reset(); _reg_EMMA_PRP_CNTL = 0x0000222D; //LOOP mode _reg_EMMA_PRP_CNTL |= 0x8000000; //bug fix _reg_EMMA_PRP_INTRCTRL = 0x00000000; //disable interrupt _reg_EMMA_PRP_SPIX_FMT = 0x20100888; //YUV422 input, UYVY... _reg_EMMA_PRP_SFRM_SIZE = 0x014000F0; //source = 320 x 240 _reg_EMMA_PRP_SLIN_STRID = 0x1005984C; _reg_EMMA_PRP_RSIZE_CTRL = 0x0b671000; _reg_EMMA_PRP_RZ_HORI_CO1 = 0x7; _reg_EMMA_PRP_RZ_VERT_CO1 = 0x7; _reg_EMMA_PRP_RZ_HORI_VALID = 0x01000001; _reg_EMMA_PRP_RZ_VERT_VALID = 0x01000001; _reg_EMMA_PRP_DRGB1_PTR = rgb; //output buf1 _reg_EMMA_PRP_DRGB2_PTR = rgb; //output buf2 _reg_EMMA_PRP_DISIZE_CH1 = 0x014000F0; //dest size = 320 x 240 _reg_EMMA_PRP_DPIX_FMT = 0x2CA00565; //RGB565 output _reg_EMMA_PRP_DLST_CH1 = 0x00000280; //dest line stride = 640 return;}// PRP_init32 : 640*480 --> 320*240void PRP_init32(unsigned long rgb, unsigned long y, unsigned long u, unsigned long v){ PRP_module_init(); PRP_reset(); _reg_EMMA_PRP_CNTL = 0x0000222D; //LOOP mode _reg_EMMA_PRP_CNTL |= 0x8000000; //bug fix _reg_EMMA_PRP_INTRCTRL = 0x00000000; //disable interrupt _reg_EMMA_PRP_SPIX_FMT = 0x20100888; //YUV422 input, UYVY...// _reg_EMMA_PRP_SPIX_FMT = 0x22000888;//YUV422 input, YUYV _reg_EMMA_PRP_SFRM_SIZE = 0x028001E0; //source = 640 x 480 _reg_EMMA_PRP_SLIN_STRID = 0x1005984C; _reg_EMMA_PRP_RSIZE_CTRL = 0x0b671000; _reg_EMMA_PRP_RZ_HORI_CO1 = 0x24; _reg_EMMA_PRP_RZ_VERT_CO1 = 0x24; _reg_EMMA_PRP_RZ_HORI_VALID = 0x02000002; _reg_EMMA_PRP_RZ_VERT_VALID = 0x02000002; _reg_EMMA_PRP_DRGB1_PTR = rgb; //output buf1 _reg_EMMA_PRP_DRGB2_PTR = rgb; //output buf2 _reg_EMMA_PRP_DISIZE_CH1 = 0x014000F0; //dest size = 320 x 240 _reg_EMMA_PRP_DPIX_FMT = 0x2CA00565; //RGB565 output _reg_EMMA_PRP_DLST_CH1 = 0x00000280; //dest line stride = 640 return;}// PRP_init31 : 1280*1024 --> 320*240void PRP_init31(unsigned long rgb, unsigned long y, unsigned long u, unsigned long v){ PRP_module_init(); PRP_reset(); _reg_EMMA_PRP_CNTL = 0x0000222D; //LOOP mode _reg_EMMA_PRP_CNTL |= 0x8000000; //bug fix _reg_EMMA_PRP_INTRCTRL = 0x00000000; //disable interrupt //wxf //_reg_EMMA_PRP_SPIX_FMT = 0x20100888; //YUV422 input, UYVY... _reg_EMMA_PRP_SPIX_FMT = 0x22000888; //YUV422 input, YUYV... //wxf _reg_EMMA_PRP_SFRM_SIZE = 0x05000400; //source = 1280 x 1024 _reg_EMMA_PRP_SLIN_STRID = 0x1005984C; _reg_EMMA_PRP_RSIZE_CTRL = 0x0b671000; _reg_EMMA_PRP_RZ_HORI_CO1 = 0x492; _reg_EMMA_PRP_RZ_VERT_CO1 = 0x492; _reg_EMMA_PRP_RZ_HORI_VALID = 0x04000008; _reg_EMMA_PRP_RZ_VERT_VALID = 0x04000008; _reg_EMMA_PRP_DRGB1_PTR = rgb; //output buf1 _reg_EMMA_PRP_DRGB2_PTR = rgb; //output buf2 _reg_EMMA_PRP_DISIZE_CH1 = 0x014000F0; //dest size = 320 x 240 _reg_EMMA_PRP_DPIX_FMT = 0x2CA00565; //RGB565 output _reg_EMMA_PRP_DLST_CH1 = 0x00000280; //dest line stride = 640 return;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -