找回密码
 注册
关于网站域名变更的通知
查看: 1824|回复: 0
打印 上一主题 下一主题

SPI程序问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2011-3-19 05:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
library IEEE;
; D# W3 b2 K- }" K3 X3 V9 B6 V9 {use IEEE.STD_LOGIC_1164.ALL;! k. d! R, u4 p. N0 D
use IEEE.STD_LOGIC_ARITH.ALL;
% V' s# }- r4 j, ~1 ]+ c" Muse IEEE.STD_LOGIC_UNSIGNED.ALL;
9 R. l# m4 A8 V6 ?+ L6 _7 @  |8 wentity spi is
/ q% a; {% W# m' C# Jport
% [9 u  V3 `7 g  j  (3 C) N, K8 N! Q9 C
   reset       : in std_logic;  --global reset signal
0 g. ^" S2 `! p3 q( `   sysclk      : in std_logic;  -- systerm clock' L# \7 i# O  }) w0 ~7 h+ M
   data_in     : in std_logic_vector(13 downto 0);
" l$ F2 D6 K+ ]* j3 H' a7 ?/ X   spi_o       : out std_logic;6 P. x* C, h* i, Z6 t
   sck_out     : out std_logic;
+ h, `/ ~2 a9 N) _; D0 [   ss_n        : out std_logic_vector(1 downto 0)
9 d' ~3 C7 V* x% L0 @8 ~  );
/ q! h9 r2 u1 V) Z; v9 U5 s6 qend spi;
0 g: W" J  c2 \) A9 f  v: ]architecture b of spi is
0 H& ?7 O/ l9 i/ v  type state_type is (idle,shift,stop);  -- data type define& r0 H9 ?7 b* ~8 j. p# ?/ S
  signal state             : state_type;- R) [0 _( N- Z
  signal out_reg           : std_logic_vector(13 downto 0):=(others=>'0');
, D7 z! |% P/ g% f: b  signal clkdiv_cnt        : std_logic_vector(3 downto 0) :=(others=>'0');8 u2 t7 w9 }- W( M4 S9 r' k: r
  signal bit_cnt           : std_logic_vector(3 downto 0) :=(others=>'0');: y/ F! {, u  u5 T( P/ V4 H7 g: S- H
  signal sck_o             : std_logic;
, f7 B4 w: J3 K1 ^/ s; X  signal full     : std_logic;
9 \- b$ I6 s3 g4 K: i; @   % s& d9 ^& \+ r; x& @
begin
+ b1 w6 D& Q1 }+ y    sck_out  <= sck_o;3 h3 J6 b3 I0 ]- y4 b5 y+ G0 h
    process(sysclk)
# l# ]6 g6 m  |; I8 k+ D! L    begin
; O" s% `6 |2 U7 G5 v! T3 ]4 }        if (sysclk'event and sysclk = '1') then  --reset
9 X+ n1 b! }8 b! T- J2 C          if (reset = '1') then
' p! }& F8 g" X* L0 b# s0 _% z8 z              ss_n        <= (others=>'1');  --AD5553 idle CS =1
3 z/ ]1 n9 ]& Y% l0 U              out_reg     <= (others=>'0');
. y" t9 c  X6 E              clkdiv_cnt  <= (others=>'0');6 {; P) y9 c$ d2 k4 S
              bit_cnt     <= (others=>'0');
2 k: u& z: m. [4 u$ f! a              spi_o       <= '1';0 @! P# `" b( I. p: `2 x+ A
              sck_o       <= '0';      -- AD5553 SCK idle is 0
9 n8 \, o5 H6 B" u& u  J              state       <= idle;: Q8 }1 b' G' `9 m4 k' s
      full     <= '0';
- N( a  f5 W* e1 I1 C9 n         else 4 m0 T, f; a" ~. [& A( i! r) n7 U6 K
    if(full = '0') then' k' d( J% y* {) l( k5 ~) j; ?  i
     out_reg    <= data_in ;3 h4 c  f6 H" u* v, J0 l* U9 ~1 V
     full <= '1';0 L( m1 K* n* T* R# M* ?; U
    end if;
+ ]  ~8 h9 v5 T" B+ G    % K1 @3 d& }$ p
           case state is
  \7 Q' }9 B+ e6 L             when idle =>
2 s- Y4 m$ f, ~/ a1 H3 a" ?0 |      
4 X- a2 v1 w$ `6 i( H" `+ J/ P& e                     state      <= shift;6 B$ `( K5 j6 p. \
                     spi_o      <= out_reg(13);0 U* x/ O% n/ M" @, d* H$ \, C
                     out_reg    <= out_reg(12 downto 0) & '0';8 Y" M! \: K3 O
                     sck_o      <= '0';
3 a5 x# B9 M- Y             when shift =>
6 X4 I4 D+ Y7 m                  clkdiv_cnt <= clkdiv_cnt + '1';7 d3 {7 W$ G- p+ L' ]! g
                  if (clkdiv_cnt(2 downto 0)="111") then# `( C5 [5 p  G; P1 l' b% P
                      sck_o      <= not sck_o;7 o0 w: P7 _  V- l% k) k
                  end if;
; K  u5 w) m2 A0 U/ r" l0 I                  . h% I9 ~# w! @. Z
      if (clkdiv_cnt = "1111") then' _/ ^; L3 O' n" n. W
                      spi_o      <= out_reg(13);
9 S6 d1 n' B0 F: @                      out_reg    <= out_reg(12 downto 0) & '0';
; T$ T/ Z5 s3 \5 U( {. i$ \                      bit_cnt    <= bit_cnt + '1';/ P$ J+ Y5 o, [/ \& y- E7 Q
                  end if;3 m6 m' p" _$ [; H5 q
                  
% U# G( U# x! |0 a      if (bit_cnt="1110" and clkdiv_cnt = "1111") then8 n# U: @0 O( q) [  m2 s8 Z! S- R
                      state      <= stop;
. E8 @( _4 {  ]; d3 S                      sck_o      <= '0';
7 d- u8 i+ V6 I5 X& r7 V                      spi_o      <= '1';
0 c8 T3 N: U; K  `                  end if;
3 y; |( K% [7 U0 S3 j6 B            
( H+ {' K4 o. M. b6 H* E- D9 a: X     when stop =>/ g7 W0 @' w+ h& P9 ~  Q0 N2 d
                  state       <= idle;& \6 ]4 u. J: l. z) N: A. `: ?
                  sck_o       <= '0';' ~0 z* X+ ?& A" N' Q) r
                  spi_o       <= '1';  L. |) E' `+ U
                  clkdiv_cnt  <= (others=>'0');; l& e/ M% @) Y8 @; A
                  bit_cnt     <= (others=>'0');
0 t) }6 }0 I+ M* @0 O1 k      full     <= '0';
( L0 r4 h) n, N& x) ]0 i! O7 n( \5 ^             when others =>. v  Q; @7 i; M& d' n
                  state      <= idle;' w! m! z7 I9 Z8 j1 [) i; N/ W
             end case;9 L. }: m9 y; d4 `1 _8 h
          end if;
+ i, n3 y( a  S        end if;/ F6 P( y5 ]# B" z5 U5 ]- [7 h
    end process;
# R$ R" p( @6 c2 ]/ kend b;
! K: f& A. o6 Y+ G- w. j3 i  x; O8 Y3 \2 ?  U; G

: R. X  w# u, R0 z1 I其中out_reg     一直是0,在idle状态赋不上值,大家看是怎么回事, r0 `. E2 ~% `" ~" T1 S# z" C1 Y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-5 07:08 , Processed in 0.109375 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表