S3C2440驱动4.3寸TFT屏程序

发布者:星光曲折最新更新时间:2016-04-18 来源: eefocus关键字:S3C2440  4.3寸  TFT屏程序 手机看文章 扫描二维码
随时随地手机看文章
简单的配色原理

 
  1. /************************************************************** 
  2. The initial and control for 16Bpp TFT LCD 
  3. **************************************************************/  
  4.   
  5. #include "def.h"  
  6. #include "option.h"  
  7. #include "2440addr.h"  
  8. #include "2440lib.h"  
  9. #include "2440slib.h"   
  10.   
  11.   
  12. #define MVAL_USED   (0)         //0=each frame   1=rate by MVAL  
  13. #define INVVDEN     (1)         //0=normal       1=inverted  
  14. #define BSWP        (0)         //Byte swap control  
  15. #define HWSWP       (1)         //Half word swap control  
  16. #define PNRMODE     (3)         // 设置为TFT屏  
  17. #define BPPMODE     (12)        // 设置为16bpp模式  
  18.   
  19. //TFT_SIZE  
  20. #define LCD_XSIZE_TFT   (480)     
  21. #define LCD_YSIZE_TFT   (272)  
  22.   
  23. #define SCR_XSIZE_TFT   (480)         
  24. #define SCR_YSIZE_TFT   (272)  
  25.   
  26. #define HOZVAL_TFT  (LCD_XSIZE_TFT-1)  
  27. #define LINEVAL_TFT (LCD_YSIZE_TFT-1)  
  28.   
  29. //Timing parameter for 4.3' LCD  
  30. #define VBPD        (2)             //垂直同步信号的后肩  
  31. #define VFPD        (4)             //垂直同步信号的前肩  
  32. #define VSPW        (8)             //垂直同步信号的脉宽  
  33.   
  34. #define HBPD        (10)            //水平同步信号的后肩  
  35. #define HFPD        (19)            //水平同步信号的前肩  
  36. #define HSPW        (30)            //水平同步信号的脉宽  
  37.   
  38. #define CLKVAL_TFT  (4)             //时钟分频因子,VCLK = HCLK/((CLKVAL_TFT+1)*2)   
  39.   
  40.   
  41. #define M5D(n)  ((n) & 0x1fffff)    //用于设置显示缓存区时,取低21位地址  
  42.   
  43.   
  44. volatile unsigned short LCD_BUFFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT];   //定义显示缓存区  
  45.   
  46. /************************************************************** 
  47. TFT LCD功能模块初始化 
  48. **************************************************************/  
  49. void Lcd_Init(void)  
  50. {  
  51.     rGPCUP  = 0x00000000;  
  52.     rGPCCON = 0xaaaa02a9;   
  53.        
  54.     rGPDUP  = 0x00000000;  
  55.     rGPDCON=0xaaaaaaaa; //Initialize VD[15:8]  
  56.   
  57.     rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(3<<5)|(12<<1)|0;// TFT LCD panel,16bpp TFT,ENVID=off     
  58.     rLCDCON2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW);  
  59.     rLCDCON3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD);  
  60.     rLCDCON4= HSPW;  
  61.     rLCDCON5 = (1<<11) | (0<<10) | (1<<9) | (1<<8) | (0<<7) | (0<<6) | (1<<3)  |(BSWP<<1) | (HWSWP);  
  62.     //16位输出格式565,VCLK下降沿取数据等 (看数据手册)  
  63.     rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);   //单扫描  
  64.     rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 );  
  65.     //LCD_WIDTH×16/16;由于是选择的16位模式,     
  66.     //如果是24位模式,每个像素4字节则为LCD_WIDTH×32/16  
  67.     //(LCD_WIDTH在此为LCD_XSIZE_TFT)     
  68.     rLCDSADDR3=(((SCR_XSIZE_TFT-LCD_XSIZE_TFT)/1)<<11)|(LCD_XSIZE_TFT/1);  
  69.       
  70.     rLCDINTMSK|=(3); // MASK LCD Sub Interrupt  
  71.     rTCONSEL &= (~7) ;     // Disable LPC3600  
  72.       
  73.     rTPAL=0;    // 禁止临时调色板寄存器  
  74. }  
  75.   
  76.   
  77. /************************************************************** 
  78. *   LCD视频和控制信号输出或者停止,1开启视频输出 
  79. **************************************************************/  
  80. void Lcd_EnvidOnOff(int onoff)  
  81. {  
  82.     if(onoff==1)  
  83.         rLCDCON1|=1; // ENVID=ON  
  84.     else  
  85.         rLCDCON1 =rLCDCON1 & 0x3fffe; // ENVID Off  
  86. }  
  87.   
  88. /************************************************************** 
  89. *   TFT LCD 电源控制引脚使能 
  90. *   pwren=1时,允许PWREN信号 
  91. *   pwren=0时,禁止PWREN信号 
  92. *   invpwre=1,PWREN信号极性反转 
  93. *   invpwre=0,PWREN信号极性正常 
  94. **************************************************************/  
  95. void Lcd_PowerEnable(int invpwren,int pwren)  
  96. {  
  97.     //GPG4 is setted as LCD_PWREN  
  98.     rGPGUP=rGPGUP&(~(1<<4))|(1<<4);    //GPG4上拉电阻无效  
  99.     rGPGCON=rGPGCON&(~(3<<8))|(3<<8);  //GPG4=LCD_PWREN  
  100.     rGPGDAT = rGPGDAT | (1<<4) ;     //GPG4置1  
  101.     //invpwren=pwren;  
  102.     //Enable LCD POWER ENABLE Function  
  103.     rLCDCON5=rLCDCON5&(~(1<<3))|(pwren<<3);   // PWREN  
  104.     rLCDCON5=rLCDCON5&(~(1<<5))|(invpwren<<5);   // INVPWREN  
  105. }  
  106.   
  107. /************************************************************** 
  108. TFT LCD单个象素的显示数据输出 
  109. **************************************************************/  
  110. void PutPixel(U32 x,U32 y, U32 c )  
  111. {  
  112.     if ( (x < SCR_XSIZE_TFT) && (y < SCR_YSIZE_TFT) )  
  113.         LCD_BUFFER[(y)][(x)] = c;  
  114. }  
  115.   
  116. /************************************************************** 
  117. TFT LCD全屏填充特定颜色单元或清屏 
  118. **************************************************************/  
  119. void Lcd_ClearScr( U32 c)  
  120. {  
  121.     unsigned int x,y ;  
  122.           
  123.     for( y = 0 ; y < SCR_YSIZE_TFT ; y++ )  
  124.     {  
  125.         for( x = 0 ; x < SCR_XSIZE_TFT ; x++ )  
  126.         {  
  127.             LCD_BUFFER[y][x] = c ;  
  128.         }  
  129.     }  
  130. }  
  131.   
  132. /************************************************************** 
  133. //实现功能: 在屏幕中画直线 
  134. //参数: 
  135. //              x1 - 起始点的x坐标 
  136. //              y1 - 起始点的y坐标 
  137. //              x2 - 结束点的x坐标 
  138. //              y2 - 结束点的y坐标 
  139. //              color - 直线颜色 
  140. //返回值:      无 
  141. **************************************************************/  
  142. void Glib_Line(int x1,int y1,int x2,int y2,int color)  
  143. {  
  144.     int dx,dy,e;  
  145.     dx=x2-x1;   
  146.     dy=y2-y1;  
  147.       
  148.     if(dx>=0)  
  149.     {  
  150.         if(dy >= 0) // dy>=0  
  151.         {  
  152.             if(dx>=dy) // 1/8 octant  
  153.             {  
  154.                 e=dy-dx/2;  
  155.                 while(x1<=x2)  
  156.                 {  
  157.                     PutPixel(x1,y1,color);  
  158.                     if(e>0){y1+=1;e-=dx;}      
  159.                     x1+=1;  
  160.                     e+=dy;  
  161.                 }  
  162.             }  
  163.             else        // 2/8 octant  
  164.             {  
  165.                 e=dx-dy/2;  
  166.                 while(y1<=y2)  
  167.                 {  
  168.                     PutPixel(x1,y1,color);  
  169.                     if(e>0){x1+=1;e-=dy;}      
  170.                     y1+=1;  
  171.                     e+=dx;  
  172.                 }  
  173.             }  
  174.         }  
  175.         else           // dy<0  
  176.         {  
  177.             dy=-dy;   // dy=abs(dy)  
  178.   
  179.             if(dx>=dy) // 8/8 octant  
  180.             {  
  181.                 e=dy-dx/2;  
  182.                 while(x1<=x2)  
  183.                 {  
  184.                     PutPixel(x1,y1,color);  
  185.                     if(e>0){y1-=1;e-=dx;}      
  186.                     x1+=1;  
  187.                     e+=dy;  
  188.                 }  
  189.             }  
  190.             else        // 7/8 octant  
  191.             {  
  192.                 e=dx-dy/2;  
  193.                 while(y1>=y2)  
  194.                 {  
  195.                     PutPixel(x1,y1,color);  
  196.                     if(e>0){x1+=1;e-=dy;}      
  197.                     y1-=1;  
  198.                     e+=dx;  
  199.                 }  
  200.             }  
  201.         }     
  202.     }  
  203.     else //dx<0  
  204.     {  
  205.         dx=-dx;     //dx=abs(dx)  
  206.         if(dy >= 0) // dy>=0  
  207.         {  
  208.             if(dx>=dy) // 4/8 octant  
  209.             {  
  210.                 e=dy-dx/2;  
  211.                 while(x1>=x2)  
  212.                 {  
  213.                     PutPixel(x1,y1,color);  
  214.                     if(e>0){y1+=1;e-=dx;}      
  215.                     x1-=1;  
  216.                     e+=dy;  
  217.                 }  
  218.             }  
  219.             else        // 3/8 octant  
  220.             {  
  221.                 e=dx-dy/2;  
  222.                 while(y1<=y2)  
  223.                 {  
  224.                     PutPixel(x1,y1,color);  
  225.                     if(e>0){x1-=1;e-=dy;}      
  226.                     y1+=1;  
  227.                     e+=dx;  
  228.                 }  
  229.             }  
  230.         }  
  231.         else           // dy<0  
  232.         {  
  233.             dy=-dy;   // dy=abs(dy)  
  234.   
  235.             if(dx>=dy) // 5/8 octant  
  236.             {  
  237.                 e=dy-dx/2;  
  238.                 while(x1>=x2)  
  239.                 {  
  240.                     PutPixel(x1,y1,color);  
  241.                     if(e>0){y1-=1;e-=dx;}      
  242.                     x1-=1;  
  243.                     e+=dy;  
  244.                 }  
  245.             }  
  246.             else        // 6/8 octant  
  247.             {  
  248.                 e=dx-dy/2;  
  249.                 while(y1>=y2)  
  250.                 {  
  251.                     PutPixel(x1,y1,color);  
  252.                     if(e>0){x1-=1;e-=dy;}      
  253.                     y1-=1;  
  254.                     e+=dx;  
  255.                 }  
  256.             }  
  257.         }     
  258.     }  
  259. }  
  260.   
  261. /************************************************************** 
  262. 在LCD屏幕上画一个矩形 
  263. **************************************************************/  
  264. void Glib_Rectangle(int x1,int y1,int x2,int y2,int color)  
  265. {  
  266.     Glib_Line(x1,y1,x2,y1,color);  
  267.     Glib_Line(x2,y1,x2,y2,color);  
  268.     Glib_Line(x1,y2,x2,y2,color);  
  269.     Glib_Line(x1,y1,x1,y2,color);  
  270. }  
  271.   
  272. /************************************************************** 
  273. 在LCD屏幕上用颜色填充一个矩形 
  274. **************************************************************/  
  275. void Glib_FilledRectangle(int x1,int y1,int x2,int y2,int color)  
  276. {  
  277.     int i;  
  278.   
  279.     for(i=y1;i<=y2;i++)  
  280.     Glib_Line(x1,i,x2,i,color);  
  281. }  
  282.   
  283. /************************************************************** 
  284. 在LCD屏幕上指定坐标点画一个指定大小的图片 
  285. **************************************************************/  
  286. void Paint_Bmp(int x0,int y0,int h,int l,unsigned char bmp[])  
  287. {  
  288.     int x,y;  
  289.     U32 c;  
  290.     int p = 0;  
  291.       
  292.     for( y = y0 ; y < l ; y++ )  
  293.     {  
  294.         for( x = x0 ; x < h ; x++ )  
  295.         {  
  296.             c = bmp[p+1] | (bmp[p]<<8) ;  
  297.   
  298.             if ( ( (x0+x) < SCR_XSIZE_TFT) && ( (y0+y) < SCR_YSIZE_TFT) )  
  299.                 LCD_BUFFER[y0+y][x0+x] = c ;  
  300.               
  301.             p = p + 2 ;  
  302.         }  
  303.     }  
  304. }  
  305.   
  306. //=============================================================  
  307. //语法格式: void TFT_Circle(int x,int y,int r,int color,unsigned char Mode);  
  308. //实现功能: 在屏幕中画圆  
  309. //参数:         
  310. //              x - 圆心的x坐标  
  311. //              y - 圆心的y坐标  
  312. //              r - 圆的半径  
  313. //              color - 圆的颜色  
  314. //              Mode -  0   空心圆  
  315. //                      1   实心圆  
  316. //返回值:      无  
  317. //=============================================================  
  318. void TFT_Circle(int x,int y,int r,int color,unsigned char Mode)  
  319. {  
  320.     int dx,dy,ref;  
  321.     int Temp;  
  322.       
  323.     if(r == 0)  
  324.         return;  
  325.     dx = r;  
  326.     dy = 1;  
  327.     ref = 707 * r / 1000;                   // 参考值为0.707r  
  328.   
  329.     if(Mode == 1)                   // 实心圆  
  330.     {  
  331.         while(dy <= dx)  
  332.         {  
  333.             if(dx > ref)  
  334.                 Glib_Line(x + ref + 1, y + dy, x + dx, y + dy, color);  
  335.   
  336.             if(x >= ref + 1 && dx > ref)  
  337.             {  
  338.                 if(x < dx)  
  339.                     Temp = 0;  
  340.                 else  
  341.                     Temp = x - dx;  
  342.                 Glib_Line(Temp, y + dy, x - ref - 1, y + dy, color);  
  343.             }  
  344.               
  345.             if(y >= dy && dx > ref)  
  346.                 Glib_Line(x + ref + 1, y - dy, x + dx, y - dy, color);  
  347.             if(x >= ref + 1 && y >= dy && dx > ref)  
  348.             {  
  349.                 if(x < dx)  
  350.                     Temp = 0;  
  351.                 else  
  352.                     Temp = x - dx;  
  353.                 Glib_Line(Temp, y - dy, x - ref - 1, y - dy, color);  
  354.             }  
  355.   
  356.             if(dy != dx || dx == ref)  
  357.             {  
  358.                 if(y < dx)  
  359.                     Temp = 0;  
  360.                 else  
  361.                     Temp = y - dx;  
  362.                 Glib_Line(x + dy, Temp, x + dy, y + dx, color);  
  363.             }  
  364.   
  365.             if(x >= dy && (dy != dx || dy == ref))  
  366.             {  
  367.                 if(y < dx)  
  368.                     Temp = 0;  
  369.                 else  
  370.                     Temp = y - dx;  
  371.                 Glib_Line(x - dy, Temp, x - dy, y + dx, color);  
  372.             }             
  373.             dy++;  
  374.             if((r*r-dy*dy)<=(dx-1)*dx)  
  375.                 dx--;  
  376.         }  
  377.   
  378.         Glib_Line(x + ref + 1, y, x + r, y, color);  
  379.   
  380.         if(x >= ref + 1)  
  381.         {  
  382.             if(x < r)  
  383.                 Temp = 0;  
  384.             else  
  385.                 Temp = x - r;  
  386.             Glib_Line(Temp, y, x - ref - 1, y, color);  
  387.         }  
  388.   
  389.         if(y < r)  
  390.             Temp = 0;  
  391.         else  
  392.             Temp = y - r;  
  393.         Glib_Line(x, Temp, x, y + r, color);  
  394.     }  
  395.     else                                                    // 空心圆  
  396.     {  
  397.         while(dy <= dx)  
  398.         {  
  399.             PutPixel(x + dx, y + dy, color);  
  400.             PutPixel(x - dx, y + dy, color);  
  401.             PutPixel(x + dx, y - dy, color);  
  402.             PutPixel(x - dx, y - dy, color);  
  403.             if(dx != dy)  
  404.             {  
  405.                 PutPixel(x + dy, y + dx, color);  
  406.                 PutPixel(x + dy, y - dx, color);  
  407.                 PutPixel(x - dy, y + dx, color);  
  408.                 PutPixel(x - dy, y - dx, color);  
  409.             }  
  410.             dy++;  
  411.             if((r*r-dy*dy)<=(dx-1)*dx)  
  412.                 dx--;  
  413.         }  
  414.         PutPixel(x + r, y, color);  
  415.         PutPixel(x - r, y, color);  
  416.         PutPixel(x, y + r, color);  
  417.         PutPixel(x, y - r, color);  
  418.     }     
  419. }  
  420.   
  421. /************************************************************** 
  422. *       LCD屏初始化 
  423. **************************************************************/  
  424. void Lcd_TFT_Init(void)  
  425. {  
  426.     Lcd_Init();  
  427.     Lcd_PowerEnable(0, 1);  
  428.     Lcd_EnvidOnOff(1);      //turn on vedio  
  429.     Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x00) ); //565格式 纯黑色  
  430. }  
  431.       
  432. void Main(void)  
  433. {  
  434.       
  435.     SelectFclk(2);  //设置系统时钟 400M       
  436.     ChangeClockDivider(2, 1);      //设置分频 1:4:8  
  437.     CalcBusClk();           //计算总线频率  
  438.       
  439.     Lcd_TFT_Init();  
  440.    
  441.    
  442.     Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x0e)  )  ;     //背景整屏蓝屏  
  443.     Glib_Rectangle(10,10,150,150,(0x1f<<11) | (0x00<<5) | (0x00)); //空心正方形边为纯红  
  444.     Glib_FilledRectangle(20,20,100,100,(0x1f<<11) | (0x00<<5) | (0x1f) ); //品红正方形  
  445.     Glib_Line(155,5,280,160,(0x00<<11) | (0x00<<5) | (0x00));   //黑色直线  
  446.     Glib_FilledRectangle(5,180,150,240,(0x1f<<11) | (0x3f<<5) | (0x00) ); //黄色矩形  
  447.     TFT_Circle(360,180,80,(0x1f<<11) | (0x3f<<5) | (0x1f),0);   //空心圆  
  448.     TFT_Circle(360,170,60,(0x1f<<11) | (0x00<<5) | (0x00),1);   //纯红实心圆  
  449.     //Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x1f)  )  ;       //clear screen  
  450.     //Delay(1000);  
  451.    
  452.  }  
  453.  

关键字:S3C2440  4.3寸  TFT屏程序 引用地址:S3C2440驱动4.3寸TFT屏程序

上一篇:S3C2440 AD转换器
下一篇:网上S3C2440驱动TFT屏资料

推荐阅读最新更新时间:2024-03-16 14:50

网上S3C2440驱动TFT资料
网上资料 TFT屏 -支持单色、4级灰度、256色的调色板显示模式 -支持64K和16M色非调色板显示模式 -支持分辩率为640*480,320*240及其它多种规格的LCD 对于控制TFT屏来说,除了要给它送视频资料(VD )以外,还有以下一些信号是必不可少的,分别是: VSYNC(VFRAME) :帧同步信号 HSYNC(VLINE) :行同步信号 VCLK :像数时钟信号 VDEN(VM) :数据有效标志信号 一般的TFT屏工作时序 外部引脚信号: VSYNC: 垂直同步信号,表示扫描1帧的开始。 HSYNC: 水平同步信号,表示扫描1行的开始。 VDEN:数据使能信号。 VD : LCD像素数据输出端口。 VCLK:像素
[单片机]
网上<font color='red'>S3C2440</font>驱动<font color='red'>TFT</font><font color='red'>屏</font>资料
S3C2440开发板裸机程序系列08—中断控制
1. 概述 最近刚刚在TQ2440上面调通了ADXL345的I2C控制,可通过串口和TFT屏查看XYZ三个轴倾角变化,本来打算把TQ2440上面的I2C控制详细解说一下,但是还跳了2个知识点:中断和I2C协议。所以还要等我补充完这2个知识点再说。(I2C协议要从51单片机说起,后面总结时再谈吧) 从程序的执行过程来说,可以分为:正常执行,跳转执行(Arm汇编是B和BL指令,B指令不返回),中断处理。 从嵌入式控制的要求来说,一个嵌入式装置要完成大量的数据采集、数据变换、外设控制等功能,这些子功能的实现一般分为:查询方式和中断方式。显然中断方式可以提高处理器利用率,提高系统实时性。 S3C2440的中断包括快速中断FIQ
[单片机]
<font color='red'>S3C2440</font>开发板裸机<font color='red'>程序</font>系列08—中断控制
S3C2440中的异常与中断
1、异常与中断的简单介绍与实现 S3C2440中一共有7种模式(如图1),其中异常模式有svc(管理模式)、abt(中止模式)、und(未定义指令模式)、irq(中断模式)和 fiq(快中断模式)5种,中止模式又分为指令预取中止和数据访问中止;usr(用户模式)不可直接切换到其他模式,而其他6种模式都可以通过修改CPSR 与其他模式进行切换(参考图3和图4)。 之所以会有这么多的异常模式是为了能更好地处理程序遇到的各种异常,在ARM状态下(S3C2440的CPU有ARM状态和THUMB状态之分)这些异常模式的差别如图2所示。在supervisor、abortt、iqr和undefine中,R0-R12 和 CPSR是通用的寄存器,
[单片机]
<font color='red'>S3C2440</font>中的异常与中断
S3C2440—8.读写SDRAM
SDRAM:Synchronous Dynamic Random Access Memory,同步动态随机存储器,同步是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写 一.内部结构 原理图如下: 存储逻辑结构: 可以看出SDRAM的内部是一个阵列,就像表格一样,其寻址方式是按照块、行、列来的,即先选定SDRAM芯片,然后发出块信号确定那一块,再发出行信号确定哪一行,再发出列信号确定哪一列。 CPU对SDRAM的访问可以分为以下几步: CPU对存储控制器发出统一编址 内存控制器发出片选信号
[单片机]
<font color='red'>S3C2440</font>—8.读写SDRAM
S3C2440的LCD编程
S3C2440的LCD编程 1. LCD工作的硬件需求:   要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以 COF/COG的 形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多的MCU内部都集成了LCD控制器,如S3C2410/2440等。通 过LCD控制器就可以产生LCD驱动器所需要的控制信号来控制STN/TFT屏了。 2. S3C2440内部LCD控制器结构图: 我们根据数据手册来描述一下这个集成在S3C2440内部的LCD控制器: a:LCD控制器由REGBANK、LCDCDMA、TIMEGEN、VID
[单片机]
<font color='red'>S3C2440</font>的LCD编程
S3C2440移植linux3.4.2内核之支持YAFFS文件系统
获取yaffs2源码并给内核打补丁 首先获取yaffs2源码(参考git命令使用详解) cd /work/nfs_root git clone git@github.com:lifeyx/yaffs2.git //若下载出现error:403,可以试试vi /etc/resolv.conf,将nameserver地址改为: 114.114.114.114 将yaffs2源码来配置到内核里(使内核支持yaffs2) vi /work/nfs_root/yaffs2/README-linux 参考上图: /*给内核打补丁*/ cd /work/nfs_root/yaffs2/ ./patch-ker.sh c m /w
[单片机]
S3C2440处理器UART专用寄存器
这里只介绍与UART有关最常用的几种寄存器,至于在编程时涉及到的其它功能的寄存器这里不做介绍。 1.ULCONn(n=0,1,2) //校验和模式寄存器 0=正常模式、1=红外模式 0XX=无校验、100=奇校验、101=偶校验 0=1位停止位、1=2位停止位 00=5位数据长度、01=6位数据长度、10=7位数据长度、11=8位数据长度 2.UCONn(n=0,1,2) //工作方式寄存器 0=PCLK、1=UCLK 0=脉冲出发、1=电平触发 0=脉冲出发、1=电平触发 0=禁止接收暂停、1=允许接收暂停 0=禁止接收错误中断、1=允许接收错误中断 0=禁止巡检模式、1=允许巡检模式
[单片机]
基于嵌入式S3C2440的船舶导航系统设计
       文章在以ARMS3C2440为核的硬件平台上应用Linux操作系统开发了船舶导航系统,完成了系统的硬件设计、软件设计、交叉编译环境的建立、引导程序的移植、内核的移植、驱动程序的编写和根文件系统的建立等,实现了系统的功能。         1.前言        集计算机技术、通信技术、微电子技术等多种技术为一体的嵌入式技术进入到了一个飞速发展的阶段,嵌入式系统已被广泛应用到了航空、消费电子、信息家电、网络通信等各个领域。ARMS3C2440ARM是嵌入式处理器是性价比较优秀的芯片,在各个领域的开发应用有着广阔的应用前景。        船舶导航技术也应随着科学技术背景的改变不断地向着高性能稳定性的方面发展,潜
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved