三,串口中断服务线程
串口中断产生以后,具体的数据处理将在中断服务线程里面完成,以BSP包中camera的中断线程为例
DWORD CameraCaptureThread(void)
{
unsigned char tmp=0;
static unsigned int time,old_time;
static unsigned int cam_intr;
DWORD dwCause;
//dwDisplayTimeout = INFINITE;
SetProcPermissions((DWORD)-1);
while(TRUE)
{
RETAILMSG(0,(TEXT("[CAM_HW] InterruptThread : Waiting For a Single Objectnr")));
dwCause = WaitForSingleObject(CameraEvent, dwDisplayTimeout);
RETAILMSG(MSG_EN_1,(_T("CameraCaptureThread(%d)++rn"), frame_count));
if (dwCause == WAIT_OBJECT_0)
{
Lock();
__try
{
if (s2440INT->INTSUBMSK & ( 1 << IRQ_SUB_CAM_C ))
{
frame_count++;
cam_intr |= ( 1 << IRQ_SUB_CAM_C );
s2440INT->SUBSRCPND = (1< } if (s2440INT->INTSUBMSK & ( 1 << IRQ_SUB_CAM_P )) { cam_intr |= ( 1 << IRQ_SUB_CAM_P ); s2440INT->SUBSRCPND = (1< } if (((s2440INT->INTSUBMSK & ( 1 << IRQ_SUB_CAM_C )) == 0) && ((s2440INT->INTSUBMSK & ( 1 << IRQ_SUB_CAM_P )) == 0)) { RETAILMSG(MSG_EN_1,(_T("[CAM]NOPrn"))); } InterruptDone(g_CamSysIntr); //time = GetTickCount(); //RETAILMSG(1,(TEXT("+time:%drn"),(time - old_time))); // Handle any interrupts on the input source if (cam_intr & ( 1 << IRQ_SUB_CAM_P )) { // display the image if (DRIVER_PREVIEW_ENABLE == 1) Display_Cam_Image(LCD_XSIZE_TFT-PREVIEW_X,0,PREVIEW_X, PREVIEW_Y, PORT_A); Buffer_preview_info_update(); cam_intr &= ~( 1 << IRQ_SUB_CAM_P ); } if (cam_intr & ( 1 << IRQ_SUB_CAM_C )) { Buffer_codec_info_update(); cam_intr &= ~( 1 << IRQ_SUB_CAM_C ); } // Enable camera interrupt //s2440INT->INTSUBMSK &= ~(( 1 << IRQ_SUB_CAM_P )|( 1 << IRQ_SUB_CAM_C )); //s2440INT->INTMSK &= ~( 1 << IRQ_CAM ); //old_time = GetTickCount(); //RETAILMSG(1,(TEXT("-time:%drn"),(old_time-time))); } __except(EXCEPTION_EXECUTE_HANDLER) { RETAILMSG(PM_MSG, (TEXT("Camera.DLL:InterruptThread() - EXCEPTION: %d"), GetExceptionCode())); } Unlock(); } else if (dwCause == WAIT_TIMEOUT) { Lock(); RETAILMSG(PM_MSG,(_T("[CAM_HW] InterruptThread Timeout : %d msecrn"), dwDisplayTimeout)); dwDisplayTimeout = INFINITE; // reset timeout until Camera Interrupt occurs bIdlePwrDown = TRUE; // Codec is off CamInterface_PowerDown(); RETAILMSG(PM_MSG, (TEXT("[CAM_HW] InterruptThread : bIdlePwrDown = TRUErn"))); Unlock(); } else { RETAILMSG(PM_MSG, (TEXT("[CAM_HW] InterruptThread : Exit %d, Cause %drn"), GetLastError(), dwCause)); } } return 0; } WaitForSingleObject()函数等待中断事件的方式。既是用在串口中断线程初始化时绑定的事件和逻辑中断 。函数的第二个参数表示等待事件发生的时间,INFINITE表示一直等待。中断触发以后设置中断标志变量cam_intr并且进行开中断的操作。OAL层的中断函数在common目录下的intr.c中实现。子中断寄存器的控制可以在OAL目录下的intr.c中实现。 四,S3C2440A串口寄存器的配置 用到了串口的FIFO模式传输数据,所以关键是配置UFCON和UCON。UFCON设置串口FIFO的中断触发值,如图 第4为用于使能FIFO模式和复位FIFO,高4位设置中断触发值,要是设置成0 ,就相当于没有使用FIFO模式。 UCON中和FIFO相关的是第8和第9位用于设置中断触发模式为LEVEL还是PULSE Pulse模式的意思是当FIFO中的数据量刚达到你要求的时候就会产生中断. 但是注意,该中断只授那一刻产生,如果那时候你正在处理上一次的中断而把该中断mask掉,那么该中断就会被丢掉,FIFO中数据就会一直增加直到溢出; Level模式的意思是只要FIFO中的数据量达到你要求的时候就会产生中断,包括比你要求的多的时候. 对于串口接收数据丢失的情况,一般我们设置FIFO接收中断的触发阀值为0,中断触发方式为LEVEL;即当FIFO中的值大于或者等于0个,都会触发接收中断,从而让中断服务线程及时的接收走数据。此外,为了更及时的响应中断,我们可以将中断服务线程中的InterruptDone函数改成自己写入清中断标志和使能中断代替,提高中断效率。
上一篇:S3C2440A串口驱动-WINCE6.0下通过串口和外设进行数据通信(一)
下一篇:uboot 替代 eboot 烧写、启动 wince
推荐阅读
史海拾趣
在电子行业中,Free2Move公司的发展故事虽不直接聚焦于传统电子制造或硬件设计,但其作为出行科技领域的创新者,与电子行业有着紧密的联系,尤其是在汽车电子、物联网(IoT)以及数据服务等方面。以下是五个与Free2Move公司发展相关的事实性故事:
1. 电动汽车生态系统的构建
Free2Move eSolutions,作为Stellantis和Engie EPS的合资企业,致力于电动汽车(EV)产品设计、开发、制造和分销的领先地位。它通过与全球科技企业的合作,如埃森哲,推动电动汽车接入电网,加速出行领域的全面电气化。这一举措不仅促进了电动汽车市场的增长,还带动了电动汽车充电基础设施、电池管理系统等电子相关产业的发展。(参考来源:埃森哲公司官网)
2. 远程信息处理与数据分析的集成
Free2Move与Guidepoint Systems合作,利用远程信息处理技术提升车队管理效率。Guidepoint Air数据监控服务能够接收来自符合条件的Stellantis车辆的数据,包括速度、位置、发动机状态等,为经销商、商业和政府车队提供库存管理和车队管理服务。这种数据驱动的解决方案依赖于先进的电子设备和物联网技术,实现了对车辆运营状态的实时监控和数据分析。(参考来源:百家号)
3. 商业车队解决方案的开发
Free2Move与Samsara的合作是另一个值得注意的案例。两家公司共同开发了一个集成解决方案,使Stellantis原厂远程信息处理设备的数据能够导入Samsara的互联运营云。这一合作让车队客户能够通过一个控制面板访问车辆的GPS定位、发动机工作小时数、燃料使用量和胎压等关键信息,从而提高了车队的运营效率和驾驶员的安全性。这一解决方案的成功实施,依赖于电子传感器、云计算和数据分析技术的深度融合。(参考来源:搜狐网)
4. 共享出行服务的全球扩展
Free2Move在全球范围内提供共享出行服务,包括共享汽车、停车位和充电站等。这一业务模式的成功,离不开电子支付系统、移动应用技术和物联网平台的支持。例如,在中国市场,Free2Move通过与当地合作伙伴的合作,推出了易微享共享汽车服务,为用户提供便捷的出行体验。这一过程中,电子支付、移动应用开发和物联网技术的运用,都是不可或缺的关键因素。(参考来源:雪球)
5. 医疗保健领域的跨界合作
虽然Free2Move的核心业务并非直接面向电子医疗行业,但其品牌名称“Free2Move”被另一家公司在医疗保健领域采用,推出了用于患者运动评估的技术系统。这一跨界合作展示了Free2Move品牌在不同领域的广泛影响力和创新能力。尽管这一故事并不直接涉及Free2Move公司的传统业务,但它反映了电子技术在不同行业间的渗透和融合趋势,以及品牌价值的多元化应用。(参考来源:爱迪斯通(北京)科技有限公司官网)
以上五个故事,从不同角度展示了Free2Move公司在电子行业中的发展和影响,体现了其在技术创新、数据服务、市场拓展等方面的综合实力。
随着全球对环境保护意识的增强,ddm hopt + schuler公司开始关注绿色制造和可持续发展。公司投入大量资源进行绿色生产技术的研发,成功开发出一系列节能、环保的电子生产设备。这些设备在保障生产效率和产品质量的同时,显著降低了能源消耗和废弃物排放。这一举措不仅提升了公司的品牌形象,也赢得了客户和市场的广泛赞誉。
在电子行业的发展过程中,Abbatron公司也面临着各种挑战和危机。某年,由于原材料价格的大幅上涨和市场竞争的加剧,公司面临着巨大的经营压力。然而,Abbatron公司凭借其强大的研发实力和敏锐的市场洞察力,及时调整战略,通过优化生产流程和降低成本等措施,成功度过了危机。
CETC自成立以来,一直致力于电子科技领域的研发创新。在某次关键技术的攻关中,CETC的科研团队经过数月的艰苦努力,成功突破了某型雷达的核心技术,使我国在该领域达到了国际先进水平。这一成果的取得不仅提升了CETC的技术实力,也为公司在国内外市场赢得了良好的声誉,为公司的后续发展奠定了坚实基础。
面对日益激烈的市场竞争和不断变化的市场需求,Electric Imp Inc.公司始终保持着敏锐的市场洞察力和持续的创新精神。公司不断推出新产品、新技术,以满足不同客户的需求。同时,公司还加强了内部管理和团队建设,提高了员工的专业素质和工作效率。这些努力使得公司能够保持持续的发展态势,并在电子行业中保持领先地位。
随着全球电子市场的快速发展,ELNA开始实施国际化战略。公司积极拓展海外市场,通过建立销售网络和生产基地,提升品牌影响力和市场竞争力。
在国际化过程中,ELNA注重本地化经营和文化融合。公司根据不同地区的市场需求和文化特点,制定相应的产品和市场策略。同时,ELNA还加强了对海外员工的培训和管理,提升团队的国际化水平和协作能力。
(以下故事四和故事五的内容,由于篇幅限制,我将不再详细展开,但您可以根据类似的结构和思路进行补充和完善。)
C++学习的门厅---控制台应用程序 //WIN程序开发的绚丽舞台,引无数手握空拳者纷至沓来,兴奋之余,竟然很容易忘记WIN开发的基础是C++:( //看中的VC++2005的也好,看中的BCB6.0也罢,均有可以编写、编译、测试的控制台应用程 ...… 查看全部问答∨ |
|
瞬联软件是国内比较知名的软件外包公司(http://www.cienet.com.cn),总部在北京,在上海,杭州,成都均有分布,客户几乎包含了所有知名的通信厂商,比如诺基亚西门子网络(NSN),摩托罗拉,爱立信等。在程序员中有很好的口碑,提供的待遇和福利也 ...… 查看全部问答∨ |
|
请教怎么在EVC下得到编辑框内光标的位置啊 POINT point; TCHAR a[20],b[20]; point = GetCaretPos(); _ltow(point.x,a,10); _ltow(point.y,b,10); AfxMessageBox(a); AfxMessageBox(b); 结果在编辑框内输入2008,光标在任意位置,显示的结 ...… 查看全部问答∨ |
请问各位大侠: 我用万用表的通断档测量电路板的正负极之间是否短路时,(电路板未加电时测量) 万用表通断档有时显示的是.548,用电阻档测量时阻值为1.5K;有时通断档显示为1.254,电阻档测得阻值为5.2K. &nb ...… 查看全部问答∨ |
今天开始学习定时器了,遇到了一些问题来和大家分享一下: 定时器一般无法进入中断:是因为我们没有修改定时器终端的地址: DCD IntDefaultHandler &nb ...… 查看全部问答∨ |