复旦微电子FM1702SL_FM1702QFN读卡机芯片手册

需积分: 8 9 下载量 199 浏览量 更新于2024-08-10 收藏 931KB PDF 举报
"此文档主要介绍了和利时DCS控制系统K系列中的TIMER相关寄存器,以及FM1702SL和FM1702QFN通用读卡机芯片的使用和规格。" 在和利时DCS控制系统K系列中,TIMER相关寄存器是系统中的关键组成部分,用于实现定时和计数功能。以下是一些重要的TIMER寄存器及其功能: 1. **TautoRestart** (0x2A, bit 5): 这个位控制定时器的自动重启动。当定时器达到预设值后,如果TautoRestart设置为1,定时器会自动重新开始计数。 2. **TimerValue** (0x0C, bits 7-0): 这个寄存器存储了当前定时器的计数值,反映了定时器的运行状态。 3. **TimerReloadValue** (0x2C, bits 7-0): 该寄存器用于设置定时器的重装载值,当定时器达到这个值时,如果开启了自动重启动,它会自动重置到这个值。 4. **TpreScaler** (0x2A, bits 4-0): 预分频器寄存器,用于设定定时器的时钟分频因子,影响定时器的精度和计数周期。 5. **Trunning** (SecondaryStatus 0x05, bit 7): 这个位表示定时器是否正在运行,1表示运行,0表示停止。 6. **TstartNow** (Control 0x09, bit 1): 设置此位可以立即启动定时器。 7. **TstartTxBegin** (TimerControl 0x2B, bit 0): 启动与传输开始相关的定时器操作。 8. **TstartTxEnd** (TimerControl 0x2B, bit 1): 用于启动与传输结束相关的定时器。 9. **TstopNow** (Control 0x09, bit 2): 设置此位可立即停止定时器。 10. **TstopRxBegin** (TimerControl 0x2B, bit 2): 停止与接收开始相关的定时器。 11. **TstopRxEnd** (TimerControl 0x2B, bit 3): 用于停止与接收结束相关的定时器。 这些寄存器的设置和操作对于精确控制系统的定时和事件触发至关重要,它们允许用户灵活地配置定时器以满足不同应用的需求。 另一方面,FM1702SL和FM1702QFN是通用读卡机芯片,由上海复旦微电子集团股份有限公司制造。产品说明书提供的是关于这两款芯片的基本信息,如结构图、管脚配置和数字接口的详细描述。其中,数字接口部分提到了它们支持的微处理器接口,如SPI接口,这使得这些芯片能够与多种微控制器进行通信,实现读卡机功能。 请注意,使用这些芯片进行设计时,应当遵循产品说明书的指导,并结合实际系统进行全面评估,以确保其适用性和兼容性。同时,复旦微电子对因使用其产品信息导致的任何损害或损失不承担责任,且产品可能随着时间不断更新,建议在使用前向复旦微电子的销售办事处确认最新信息。

重写下面代码;timer_handle_t itcs_timer_init(timer_handle_t handle, timer_event_cb_t cb_event) { timer_priv_t *timer_priv = handle; if (timer_priv->idx < 0 || timer_priv->idx >= CONFIG_TIMER_NUM) { return NULL; } set_clock_type("cpu-pclk"); // printf("enter timer init fun in driver\n"); uint32_t tempreg = 0; switch (timer_priv->idx) { case 0: timer_priv->base = ITCS_TIMER0_BASE; break; case 1: timer_priv->base = ITCS_TIMER1_BASE; break; default: break; } // printf("unit %d ,timeridx %d, base addr // %08x\n",timer_priv->idx,timer_priv->timeridx,timer_priv->base); switch (timer_priv->timeridx) { case 1: tempreg = readl(timer_priv->base + TIMER_CCR_CONTROL_C1); tempreg |= CCR_RST_ENABLE; writel(tempreg, timer_priv->base + TIMER_CCR_CONTROL_C1); tempreg = readl(timer_priv->base + TIMER_IER_C1); tempreg &= ~(IER_EVNT_ENABLE | IER_ITRV_ENABLE | IER_M1_ENABLE | IER_M2_ENABLE | IER_M3_ENABLE); writel(tempreg, timer_priv->base + TIMER_IER_C1); if (timer_priv->idx == 0) { timer_priv->irq = TTC0_TIMER1_IRQn; request_irq(TTC0_TIMER1_IRQn, itcs_timer_irq, "itcs_timer_irq01", timer_priv); } else { timer_priv->irq = TTC1_TIMER1_IRQn; request_irq(TTC1_TIMER1_IRQn, itcs_timer_irq, "itcs_timer_irq11", timer_priv); } break; case 2: tempreg = readl(timer_priv->base + TIMER_CCR_CONTROL_C2); tempreg |= CCR_RST_ENABLE; writel(tempreg, timer_priv->base + TIMER_CCR_CONTROL_C2); tempreg = readl(timer_priv->base + TIMER_IER_C2); tempreg &= ~(IER_EVNT_ENABLE | IER_ITRV_ENABLE | IER_M1_ENABLE | IER_M2_ENABLE | IER_M3_ENABLE); writel(tempreg, timer_priv->base + TIMER_IER_C2); if (timer_priv->idx == 0) { timer_priv->irq = TTC0_TIMER2_IRQn; request_irq(TTC0_TIMER2_IRQn, itcs_timer_irq, "itcs_timer_irq02", timer_priv); } else { timer_priv->irq = TTC1_TIMER2_IRQn; request_irq(TTC1_TIMER2_IRQn, itcs_timer_irq, "itcs_timer_irq12", timer_priv); } break; case 3: tempreg = readl(timer_priv->base + TIMER_CCR_CONTROL_C3); tempreg |= CCR_RST_ENABLE; writel(tempreg, timer_priv->base + TIMER_CCR_CONTROL_C3); tempreg = readl(timer_priv->base + TIMER_IER_C3); tempreg &= ~(IER_EVNT_ENABLE | IER_ITRV_ENABLE | IER_M1_ENABLE | IER_M2_ENABLE | IER_M3_ENABLE); writel(tempreg, timer_priv->base + TIMER_IER_C3); if (timer_priv->idx == 0) { timer_priv->irq = TTC0_TIMER3_IRQn; request_irq(TTC0_TIMER3_IRQn, itcs_timer_irq, "itcs_timer_irq03", timer_priv); // printf("unit timer1 ret=%08x , request irq3 success!\n",ret); } else { timer_priv->irq = TTC1_TIMER3_IRQn; request_irq(TTC1_TIMER3_IRQn, itcs_timer_irq, "itcs_timer_irq13", timer_priv); // printf("unit timer1 ret=%08x , request irq3 success!\n",ret); } break; default: return NULL; } timer_priv->cb_event = cb_event; // printf("init status irq id num:%d\n",timer_priv->irq); // printf("INIT TIMER %d Timer Count No %d SUCCESS\n", timer_priv->idx, // timer_priv->timeridx); return (timer_handle_t)timer_priv; }

2023-02-17 上传
2023-02-18 上传