新闻中心

EEPW首页 > 手机与无线通信 > 设计应用 > CPLD的串口通信设计

CPLD的串口通信设计

作者: 时间:2011-04-30 来源:网络 收藏

  IF reset='0' THEN

  count:=0;

  clk19200hz:='0';

  ELSIF f10MHz'EVENT AND f10MHz='1' THEN

  IF count=260 THEN

  count:=0;clk19200hz:= NOT clk19200hz;

  ELSE

  count:=count+1;

  END IF;

  END IF;

  baud_rate=clk19200hz;

  END PROCESS;发送模块e#2. 发送模块

  发送部分采用状态机t_state 进行编程,共设两个值:t-start 和t_shift,分别表示发送开始以及发送保持状态。复位键按下时设置到t-start 状态,并将发送数据位设为“1”, 发送的数据位数计数为0,在t-start 状态,状态机将处于这一个状态并等待波特率计数信号的电平上升沿到来。上升沿到来时,依据t_state 状态的不同值做不同处理,如果是t-start 开始状态则先读待发送的数据,并发送开始位“0”,然后将状态转到发送保持t_shift 状态,在发送保持t_shift 状态,不断判断发送的数据位数是否满8 位,如果满了则回归t-start 状态,否则继续发送,保持在t_shift 状态,为避免干扰将其余情况下的状态自动跳转到t-start 状态。程序如下:

  PROCESS(baud_rate,reset,data)

  -- 数据发送部分

  VARIABLE t_no:INTEGER RANGE 0 TO 8;

  -- 发送的数据各位的位序号

  VARIABLE txds:STD_LOGIC;

  VARIABLE dtmp:STD_LOGIC_VECTOR(7

  DOWNTO 0);

  BEGIN

  IF reset='0' THEN

  t_state=t_start;

  txds:='1';

  t_no:=0;

  ELSIF baud_rate'event AND baud_rate='1' THEN

  CASE t_state IS

  WHEN t_start=>

  dtmp:=data;

  txds:='0'; -- 发送开始

  t_state=t_shift;

  WHEN t_shift=> IF t_no=d_len THEN

  txds:='1'; -- 发送结束

  t_no:=0;

  t_state=t_start;



关键词: 设计 通信 串口 CPLD

评论


相关推荐

技术专区

关闭