2 MHz-1 = 0.5 µs
(104 µs / 0.5 µs) - 1 = 207
因此,我们希望CNT0计数器值为207。为确保不丢失数据,在SPI时钟上增加半个时钟周期延迟,从而SPI功能块在正确的时间进行计时。这是通过使用CNT6、2-bit LUT1和OSC模块的外部时钟来实现的。CNT6的输出在DFF0计时52 µs后才会变高,这恰好是我们SCLK周期104 µs的一半。当它变高时,2-bit LUT1 与门允许2 MHz OSC信号进入EXT. CLK0输入,其输出连接到CNT0。
图2:UART接收器
2.控制单元
在这部分中,将根据UART接收器接收的字节或根据来自外部按钮的信号执行命令。引脚12、13、14、15被初始化为输入,并连接到外部按钮。
每个引脚内部连接到OR门输入,门的第二个输入端通过蓝牙连接来自智能手机的相应信号,该信号将出现在SPI并行输出上。
DFF6用于激活睡眠模式,其输出变为高,上升沿来自2-bit LUT4,而DFF10用于维持照明状态,其输出从低变为高,当每个上升沿来自3-bit LUT10输出时反之亦然。
FSM1是一个8-bit计数器;当它的值达到0或255时,它在输出上给出一个高脉冲。因此,它用于防止FSM0(16-bit)的值超过255,它的输出复位DFF,并且它将DFF10状态从开启变为关闭。如果照明由按钮 + 和 - 控制,并且已达到最大/最小值,亦是这样。
连接到FSM1输入的信号keep、up将通过P11和P12到达FSM0,以保持同步,在两个计数器上保持相同的值。
图3:控制单元设计
3.时钟发生器和复用器
在这部分中,将生成三个频率,但只有一个频率将在任一时候为FSM计时。第一个频率是RC OSC,它从矩阵0到P0取出。第二频率是LF OSC,它也从矩阵0到P1取出。第三个频率是CNT7输出。
根据3-bit LUT14输出,3-bit LUT9和3-bit LUT11允许一个频率通过。之后,所选择的时钟通过CNT1和CNT3发送到FSM0和FSM1。
图4:时钟发生器设计
4. PWM
最后,FSM0值转换为PWM信号,通过引脚20出现,引脚20初始化为输出,并连接到外部LED。
图5:PWM功能块
安卓app
安卓app具有类似于真实界面的虚拟控制界面。它有五个按钮:ON/OFF、UP、DOWN、睡眠模式和连接。该安卓应用程序将按钮按动操作转换为命令,并将命令发送到蓝牙模块来执行。