历史上的今天
返回首页

历史上的今天

今天是:2024年08月26日(星期一)

正在发生

2021年08月26日 | S3C2440A串口驱动-WINCE6.0下通过串口和外设进行数据通信(二)

2021-08-26 来源:eefocus

三,串口中断服务线程

串口中断产生以后,具体的数据处理将在中断服务线程里面完成,以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< s2440INT->INTSUBMSK &= ~(1< //RETAILMSG(1,(_T("CAM_C, ts %drn"), GetTickCount()));

}

 

if (s2440INT->INTSUBMSK & ( 1 << IRQ_SUB_CAM_P ))

{

cam_intr |= ( 1 << IRQ_SUB_CAM_P );

s2440INT->SUBSRCPND  =  (1< s2440INT->INTSUBMSK &= ~(1< //RETAILMSG(1,(_T("CAM_P, ts %drn"), GetTickCount()));

}

 

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函数改成自己写入清中断标志和使能中断代替,提高中断效率。

推荐阅读

史海拾趣

Amphenol Thermometrics公司的发展小趣事

Amphenol Thermometrics 是 Amphenol 公司旗下的子公司,专注于设计、制造和销售温度传感器和测量解决方案,在电子行业和其他领域发挥着重要作用。以下是关于 Amphenol Thermometrics 公司发展的五个相关故事:

  1. 创立与初期发展:Amphenol Thermometrics 公司的历史可以追溯到20世纪60年代,当时公司成立于美国纽约州的克拉克森市。最初,公司主要致力于生产温度传感器和测量装置,为不同行业的客户提供可靠的温度监测解决方案。随着技术的进步和市场需求的增长,Amphenol Thermometrics 逐渐壮大成为温度传感器领域的重要参与者。

  2. 技术创新与产品多样化:Amphenol Thermometrics 公司在温度传感器领域持续进行技术创新,并不断推出新型的温度传感器和测量解决方案。公司致力于提升产品的精度、灵敏度和可靠性,满足客户对高性能温度监测设备的需求。除了传统的温度传感器,Amphenol Thermometrics 还推出了一系列新型产品,如热电阻、热敏电阻、红外线传感器等,拓展了产品线的多样性。

  3. 客户合作与定制化解决方案:Amphenol Thermometrics 公司与客户建立了密切的合作关系,共同开发定制化的温度传感器和测量解决方案。公司的工程团队与客户紧密合作,根据客户的需求和应用场景,设计和制造符合特定要求的产品。这种定制化解决方案能够满足客户个性化的需求,为客户提供更加专业和完善的温度监测服务。

  4. 质量控制与认证标准:Amphenol Thermometrics 公司高度重视产品质量控制,并严格遵循国际质量管理体系标准。公司的生产工艺和质量管理体系符合ISO 9001质量管理体系认证标准,以确保产品质量的稳定性和可靠性。此外,Amphenol Thermometrics 公司的产品还通过了各种行业和应用领域的认证标准,如汽车行业的TS16949认证等,确保产品符合行业标准和规定。

  5. 全球市场拓展与合作伙伴关系:除了在美国的生产基地外,Amphenol Thermometrics 公司还在全球范围内设有多个销售办事处和代理商网络,拓展了国际市场份额。公司与全球各种行业领先企业建立了长期稳定的合作关系,共同推动产品的创新和市场拓展。通过全球市场拓展和合作伙伴关系,Amphenol Thermometrics 公司不断扩大业务规模,增强了在温度传感器领域的市场竞争力。

这些故事展示了 Amphenol Thermometrics 公司从成立初期到如今在技术创新、产品多样化、客户合作与定制化解决方案、质量控制与认证标准以及全球市场拓展与合作伙伴关系等方面取得的重要进展。

Danaher Corporation公司的发展小趣事

自上世纪80年代起,丹纳赫集团通过一系列的战略并购,逐渐扩大其在电子行业的影响力。这些并购不仅为丹纳赫集团带来了先进的技术和产品,还增强了其在全球市场的竞争力。其中,对Leica显微系统公司的收购标志着丹纳赫集团正式涉足生命科学业务,为其在电子显微镜和生命科学仪器领域的发展奠定了基础。

FSP [FSP TECHNOLOGY INC.]公司的发展小趣事

丹纳赫集团起源于1984年,由Steven Rales和Mitchell Rales兄弟二人创立。他们的愿景是建立一个致力于持续改善并提升客户满意度的制造公司。名字“Dana”源自古老的凯尔特语,寓意奔腾不息的精神和不断改善的品质。起初,丹纳赫集团并未直接涉足电子行业,但随着公司的发展,逐渐将业务范围扩展至包括电子设备和技术的领域。

General Magnetics Inc公司的发展小趣事
采用更高效的散热方式,如增加散热面积、优化风道设计等,以降低电子变压器的运行温度。
Elektron公司的发展小趣事

Elektron公司的故事始于1942年,由威利·科伯以Elektron物理技术设备工厂Kerber的名称成立。当时,该公司主要生产基于汞蒸气整流器的固定电池电源和船用电池充电器。这些产品在市场上取得了良好的反响,为公司的发展奠定了坚实的基础。在随后的几年里,Elektron不断扩大产品范围,开始涉足汽车行业的电池充电器以及焊接和切割工艺的电源等领域。

Asia Electronics Ind Co Ltd公司的发展小趣事

Asia Electronics Ind Co Ltd自成立以来,一直致力于电子技术的研发与创新。公司投入大量资源用于研发,不断推出具有市场竞争力的新产品。其中,公司成功开发的一款高效能、低功耗的电子产品,在市场上获得了广泛的认可。这款产品不仅满足了消费者对性能的需求,还顺应了绿色环保的发展趋势,为公司赢得了良好的口碑。

问答坊 | AI 解惑

某机载三相交流稳压电源的研制

  摘要:介绍了某机载三相交流稳压电源的研制情况。对电源电路进行了分析、计算和计算机仿真。应用高频脉宽调制斩波调感技术,以MOS场效应管取代了传统的双向晶闸管,用脉宽调制取代了相控技术。通过对电路的优化设计,降低了输入谐波电流。 ...…

查看全部问答>

WinCE不支持CryptEncryptMessage怎么办?

有什么替代的function么?微软或者不是微软都行。谢谢。…

查看全部问答>

oledb 问题,急!

各位大哥,为什么我调用IDBInitialize::Uninitialize函数时,程序会死在里面,不完成函数呢?根据MSDN的说明,我将所有的指针全部都release了,但还是死在那函数里面!搞不明白。…

查看全部问答>

arm上怎样用linux提供的spi驱动

在s3c2440的板子上移植了2.6.22内核。我想直接用2.6.22提供的SPI驱动。 看了一下,也不知道怎么来用,有好几个与spi驱动相关的源文件,没理清他们之间的关系。 我应该用哪一个spi相关的源文件?怎样来加载spi驱动?是在配置内核时选上spi support ...…

查看全部问答>

串口终端为何看不到RETAILMSG输出消息?

我用的是友善之臂的mini2440,我在OAL中使用了RETAILMSG返回一些调试信息,可是在板子上跑起来以后,在串口超级终端上除了一开始EBOOT有信息输出外,然后就看不到有任何信息输出了(我能肯定这些RETAILMSG语句是执行了的),请问这是怎么回事啊?望有高人指 ...…

查看全部问答>

西安成立研发设计中心,招聘如下工作人员:

华之光科技有限责任公司主要从事嵌入式电子的开发应用,现因公司的发展需要,在西安成立研发设计中心,招聘如下工作人员: 嵌入式软件底层开发工程师 (3-5名) 职位要求: 1.        本科或以上学历,通信、计算机或相关专业 ...…

查看全部问答>

还是关于u盘驱动的事

谁能告诉我,往U盘里面写一个文件,全过程是怎样的呢,驱动软件收发了哪些消息,在U盘里面创建文件的时候目录怎么弄,文件名怎么弄,怎样找到的这个文件? 头疼一大堆…

查看全部问答>

MSP430_C语言扩展部分

C语言扩展部分   1.1.1          扩展关键字 1.       asm 也可以写成 _asm。功能是在c程序中直接嵌入汇编语言。 Asm(“string”); 其中str ...…

查看全部问答>