upp问题,在SYSBIOS下的应用问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5626|回复: 2
打印 上一主题 下一主题

upp问题,在SYSBIOS下的应用问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?; z* ]. I1 t; G* q- A+ Y; L
Void UPP_TASK(Void)
, b; _* @% m  `2 @* U{
; V! Q$ r& I9 k, Z8 C5 U7 o" e, m  P& P9 r0 @. j' n6 Y
    int i,j,k,target_int_count=2;: C% p' F1 P3 B
    char ch[2];
! U& `9 i* b3 i7 \9 s# U- d, J% V, }( H

- B: |% p; O; ]( B! ^
/ O! n* i9 l% s    upp_interrupt_count  = 0;
8 h8 I. t9 w8 q5 Q2 V    upp_error_count = 0;
4 t# Q' C4 a( O7 d/ z! y/ m, O' E& ?7 P9 V, I& Q- L4 |
    UARTPuts("\tResetting uPP buffers...\r\n",-2);6 C. V* ^8 P' j. J2 F; r7 ]6 D1 w
    // Initialize data buffers
/ N0 ?! g1 y4 S4 a. g7 |    for (i = 0; i < upp_frame_size; i++)
/ r! _+ {& D8 z3 n. x8 h8 T    {
" d$ n+ T1 B  Q$ }5 B) j& V* w       upp_buffer_b =i;
3 h. K: o" E. B' S) J4 Z       upp_buffer_a = 0xDEAD;( o8 m; P) H* Z8 v" P; n& n
    }
  S" h9 J1 v' C9 p% s+ A- q' L! `$ @
    //for(i=0;i<1024;i++)+ [* d% n" b1 R( ]0 ^
    //    temp=0;9 ]8 m8 ^+ |7 G, q5 d7 |; j

5 Y/ r- f! b# _8 O, }! ~$ v' i    //UPPReset();
* d0 {; L0 L, j# w( ]* t    /*启动UPP DMA传输*/: ?* h2 R$ \; N# l' N
    UARTPuts("upp_prog_dma_i\n",-2);7 C% q7 _1 b/ G9 v$ g; b
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;2 @7 S  h& c, w9 L' S
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- R& [. d* {, a3 d2 j7 l; b    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ }. Y2 L& |! L' ^: d# |8 [0 I7 a% E: t! T. ]; G2 |
    UARTPuts("upp_prog_dma_i\n",-2);
. A4 J9 ]9 O) G+ d    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;7 I7 ^. i* J% g. N* w. Q  n
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 w. w. F+ H. O" f# j* O4 f% W  ?
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 F: o" Q1 k7 b8 A3 m! R
0 L9 i$ }1 q6 B7 n    /*等待UPP传输完毕*/
; p7 e5 W9 @$ Z8 y+ |% ]    //i=0;- T" p. ^( G1 h$ y# X/ _
    //j=0;
# h+ \5 v; [; N6 y7 Y    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( X2 ~5 V7 `0 q" p5 r    {
6 w7 d9 R& w0 |        /*  测试UPP传输的同时操作普通DDR数据! c' U3 A3 G5 M' |
        temp=i;
- @0 ]  Y+ p. q& c  N- [! K6 G        i++;* x. m+ h& L7 o* w  G$ @* y+ ~" O
        if(i==1024). L( t7 {) d1 g, J0 u, A$ D
        {
& Y* \5 p' L  }8 W! P            i=0;7 V3 Z2 M) F) o0 `# r" J
            j++;. \+ y. f6 [5 X" O
        }
# [/ \/ R- y" ?- b        */
; \) B- j+ F/ w2 X3 q, C
2 F7 c/ h; f2 O3 N0 \) D8 a' p0 o( y       asm(" nop");
. F# d! a! [: F- ?  p/ j) r$ i) V% b7 a# D
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' @7 V4 U! x7 J, O+ i7 n    }
! C- ~6 t' |- o- f1 t2 n# r" B- Q. w; S6 L. ~, M3 W
    /*检查UPP传输的数据是否正确 (loopback modes only)*/- Q4 i: S8 P6 B
    //UARTprintf( "i=%d\n",i);
& l7 {  `( R: z4 v$ P# J    //UARTprintf( "j=%d\n",j);' F! b9 J- P& l, Q' b( z7 J
    UARTPuts("Data mismatch in buffers.\n",-2);
& d+ ^7 l8 l% }3 G  y    if (upp_interrupt_count == 2 && upp_error_count == 0)
( @' q6 b8 f; g5 f: X' V    {
9 J5 n) ^5 }& t- l) r! S# G        for (i = 0; i<upp_frame_size; i++)
2 ~5 t7 O) D6 x        {
( T0 C) S, q% P4 t/ ~6 v' X. `            if (upp_buffer_a != upp_buffer_b)) L4 o  a) k1 |: E5 B# P8 E8 ]
            {* b& L; U- ^6 {1 D- c, M6 Y$ B' h
                upp_error_count++;% R- S7 ]) f; z4 M% k; k) w
            }
& T5 _& Q1 B1 q        }
7 u6 X, s# e$ d: P8 R& v    }6 ?' H. n- r3 R6 `0 |% ^: ?& M
0 |* ]  T+ {+ t# r! Q
    /* 报告通信结果*/
7 g! g! n/ E! h& l; n+ E    if(upp_error_count != 0)
! ^, W% l/ E* Y        UARTprintf( "upp_error_count=%d\n",upp_error_count);1 ]' R$ P5 Z! S6 N, N0 o0 H
    else
/ R4 p) f  C+ i/ s2 I) Y' Q        UARTPuts("uPP transfers complete!\n",-2);
- @2 [" b! N% o( ]2 |. ^
; N. v0 j/ Y, d1 ~5 M$ I! C    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
. s  L9 P7 E" a; g) n0 P9 N    UARTGets(ch,2);
% l. O& P1 y" G4 u6 n* ^    UARTPuts("\n", -2);
0 u% x+ d2 v/ o/ Z6 X
- ^# q& [; f$ w* F; ~    if(ch[0] == 'y')
$ u6 s9 t" f9 y# E; ?    {
  C/ U- {  ?2 E6 }- s+ Y" q5 d2 ]' n        /*打印全部读到的数据*/5 [+ Y, e3 {. K# P
        for(i=0; i<upp_frame_size; )% g3 C+ n$ {( q, X
        {# p& L2 [/ x" D+ `( u; F% v
            for(j=0; j<5; j++)
1 L+ I- Y2 p3 W/ b0 \            {/ |" k+ H8 u* n4 f- h- Q8 x9 x1 ]
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
2 O( e' q5 i- h& `* w  O                i++;/ g: s6 I/ @# ^$ |. M( f" f, C
                //if(i >= 4096)
6 H* [0 Y* ^3 d                //    break;3 j/ H8 v  L* V

& o+ q4 Q" n! D            }
. A8 o" @1 O& {. @# e, p            UARTPuts("\n",-2);
/ E# c" U0 L) t$ Y  o- F; e) T5 M        }4 k" I0 [2 h! i# S  @& c- E' W
    }  E) U& Z& O, m4 G" P9 X, b
" Q6 J3 z3 c7 W* O- a
}
' L+ O0 j$ k  X0 V" I

6 c) w  A2 U% P( b! x5 o6 `  t3 z, y' o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: n% v' S( R5 R
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
8 _6 `6 |5 s4 s4 ]5 L. s: h
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-18 18:35 , Processed in 0.040134 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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