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

SPI程序问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
library IEEE;. {5 Q: [( _2 m/ n
use IEEE.STD_LOGIC_1164.ALL;
* `2 f/ l2 h4 A! A. s' L: w8 luse IEEE.STD_LOGIC_ARITH.ALL;
: c# ^. n; J4 X! _+ [% ^9 Yuse IEEE.STD_LOGIC_UNSIGNED.ALL;
9 N+ F  A- }1 g; V  w  m: ]  Dentity spi is 9 @# a# g6 ~* |+ t
port 3 p: ?( `3 R1 ^  c8 `  u, c
  (9 ]$ c. \4 p( w. f% E
   reset       : in std_logic;  --global reset signal
$ |4 {0 ?6 r- O9 F1 X9 O4 Q   sysclk      : in std_logic;  -- systerm clock# [( Z# d3 d1 g; t/ v2 N4 d
   data_in     : in std_logic_vector(13 downto 0);
# J6 G+ F; D  i; S3 K+ d! j   spi_o       : out std_logic;
9 H5 w3 i( @  c+ J+ e; W   sck_out     : out std_logic;
6 T( Q4 g# o# z* C% s   ss_n        : out std_logic_vector(1 downto 0)
. P: A, m3 a6 J: b3 j6 s  );. ?6 f  I$ S) b! D8 C- n, d
end spi;
2 c! n+ V# R% X+ d% harchitecture b of spi is
) x; p: v" A- S0 A( u  type state_type is (idle,shift,stop);  -- data type define1 V0 ?0 |9 ~7 M1 o+ }$ j- D
  signal state             : state_type;+ u9 {. G+ ]0 O* S1 i/ N
  signal out_reg           : std_logic_vector(13 downto 0):=(others=>'0');+ |  y) h3 n9 e$ [* b8 L0 f7 i- L
  signal clkdiv_cnt        : std_logic_vector(3 downto 0) :=(others=>'0');# r" I% M" _3 t7 S0 l/ W2 [
  signal bit_cnt           : std_logic_vector(3 downto 0) :=(others=>'0');
) f( }+ u5 Y8 a2 w- j  signal sck_o             : std_logic;9 r6 X( u" x$ N' J2 F2 }7 K
  signal full     : std_logic;) t, p; c2 Z8 G+ i4 |
   5 E- _9 J& M0 p% K1 m
begin
7 j' |& g4 L4 X7 l6 U    sck_out  <= sck_o;
2 k1 Z: n- m# d( i    process(sysclk)* M. |  k5 ?( d) b8 y1 g
    begin* z9 U4 L8 R1 z: e3 v2 D7 P
        if (sysclk'event and sysclk = '1') then  --reset& s) b+ N( V9 m( J, B2 e
          if (reset = '1') then- z$ v& \0 l8 y1 X+ }9 q7 `
              ss_n        <= (others=>'1');  --AD5553 idle CS =1
' R/ {$ f3 q# @              out_reg     <= (others=>'0');
4 m: M. Q' H5 G9 h0 y              clkdiv_cnt  <= (others=>'0');' ~8 N/ F; D9 `* I  u
              bit_cnt     <= (others=>'0');
7 S( T8 ]% f4 c9 B! G- z/ ^              spi_o       <= '1';& n- z* h6 f6 i! Q- q$ a' D
              sck_o       <= '0';      -- AD5553 SCK idle is 09 ?6 z' }$ g" ?' u
              state       <= idle;/ J8 p2 t/ e; J8 V1 m$ W
      full     <= '0';
7 F' t9 ?/ y( K& w( K! }         else
9 L/ G( m4 [7 T) L5 P    if(full = '0') then
1 @/ l* |& u( j! g     out_reg    <= data_in ;
, q1 N3 P- }; \4 \8 C5 z+ v     full <= '1';# M$ y9 v8 s4 {' b9 N0 f0 _5 c
    end if;
( K" o1 m' y+ k* ]$ V0 F+ `   
0 W, J% s, g' P; `; q' \  `3 a" {( q           case state is # H) p+ k, \# R7 [2 c2 I
             when idle =>$ S* v8 C% i9 X
       3 G" j; O  @, e' S
                     state      <= shift;
5 |# Q6 H3 _$ L2 W                     spi_o      <= out_reg(13);$ G& y& O6 N' k3 ]' K
                     out_reg    <= out_reg(12 downto 0) & '0';
- d1 y- X+ l# B2 w$ r                     sck_o      <= '0';
$ O6 k2 y! W6 p, e" i8 ^' A             when shift =>! W$ Z% `2 b/ @0 j, z5 K
                  clkdiv_cnt <= clkdiv_cnt + '1';) ^: }; g+ t  ]1 L" Z' B
                  if (clkdiv_cnt(2 downto 0)="111") then% J! x8 k$ {$ w5 E  p5 [
                      sck_o      <= not sck_o;
2 p, Q. u) R' x; O, I# o                  end if;, U, E7 D1 q  [: V9 @
                  - O( u2 p/ z1 d6 |; A7 d8 d7 q0 m
      if (clkdiv_cnt = "1111") then
3 O. E5 X6 c3 _, _4 D2 F9 w                      spi_o      <= out_reg(13);* e  {7 V7 E, s5 H1 U% F' }
                      out_reg    <= out_reg(12 downto 0) & '0';( @5 R* ?1 ~' v
                      bit_cnt    <= bit_cnt + '1';9 r# n5 j* L7 t4 X1 G5 A
                  end if;
2 `# X( Y* d2 ^1 x                  7 {  y. W& y5 T( [
      if (bit_cnt="1110" and clkdiv_cnt = "1111") then3 B, j& h- I* P3 B1 Y# H0 V) Q5 G
                      state      <= stop;
9 Z, [1 S: W* ]- t% Y$ R                      sck_o      <= '0';9 z1 m2 ^! z6 G. c' I& t2 n  e
                      spi_o      <= '1';
2 N" w& |. f6 y& L0 U                  end if;
1 C  [1 u" |8 B& r  `/ D6 ~             ( t+ G- G; A4 A( Q, @2 n; d
     when stop =>
2 t/ }4 t0 l* b. L- C- ~                  state       <= idle;
" j* G/ x6 ?" S! }" f* {3 T                  sck_o       <= '0';
4 l6 T" T4 h' F5 I- A7 L                  spi_o       <= '1';
* G& l1 c8 z! [! m                  clkdiv_cnt  <= (others=>'0');
7 s( \9 \  V! r- d0 L                  bit_cnt     <= (others=>'0');# T! s; G0 l* Y
      full     <= '0';7 j" C) E8 o0 g. r
             when others =># B/ W0 [- c) l4 [! ^' i! j
                  state      <= idle;. d; R4 p% W# ~1 X- Q& q
             end case;. n6 a, I1 m2 Y/ r, ?: m
          end if;, z  t' f& e6 G3 ?. n% O+ \  u
        end if;
) W8 j/ o/ I" B" R1 j3 {    end process;
! X3 G4 {0 \: lend b;
2 q, q4 k2 w& R8 C4 S  }1 c' Z2 y7 Y! g
3 w) p8 V, W4 |, l
$ \# ~! ?2 {( B( _0 b其中out_reg     一直是0,在idle状态赋不上值,大家看是怎么回事+ n- u8 a0 `" }( C# v
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-19 22:23 , Processed in 0.109375 second(s), 24 queries , Gzip On.

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

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

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