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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; Z( f3 X4 f! ~0 c; a2 c5 o
Void UPP_TASK(Void). E) T7 g) a( a$ c/ |5 {. X& u) l
{
  o. `; y+ |0 _7 b& |  z' n1 }6 F  {' @2 w! |) b  e' x: x
    int i,j,k,target_int_count=2;  F1 P: D' m/ q
    char ch[2];
. N# Y% ^* o1 }+ o  \2 x7 Y, J
" W9 Q5 r! O3 w- g- y( D) b- j" T) T+ Y
  @- }1 I- l& h+ O& v; v: V
    upp_interrupt_count  = 0;9 p9 @- W4 N2 Z) u, V$ n
    upp_error_count = 0;4 L* P( g# l+ v3 v7 f& Q' a+ k: @
1 Z0 u4 |& o, a  ?& {
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
& }) T" `/ E% h    // Initialize data buffers
0 B- s" B7 Z  a! X7 l    for (i = 0; i < upp_frame_size; i++)" a. U1 Y9 E) p! L& d8 l
    {5 l% H2 g2 F+ J! }7 o, U' G6 R
       upp_buffer_b =i;
4 n, T  X3 z: ]- K( ]2 f" o- B! W       upp_buffer_a = 0xDEAD;
" }1 m! e$ ?: [& T    }9 l/ s0 l9 Z/ S+ _) a" o/ H+ v

( d0 d, r- a6 z) Y6 [. Y' H+ J    //for(i=0;i<1024;i++)
3 b0 g0 G, O5 x/ j8 D) I    //    temp=0;
! j* m  l9 t- x, u& @1 K' F' g/ L# C
    //UPPReset();
* ?, @, C9 a/ |8 @# ^+ T( m    /*启动UPP DMA传输*/
: B$ I. k' r; U" K6 e( A* _) v    UARTPuts("upp_prog_dma_i\n",-2);% ]" W( G0 h) a
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;+ A8 F1 A+ z- G0 o0 d; f
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; N; _0 K  u; c6 A3 q! Z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);% C  S' X6 I- \8 E

$ V: G  O: B8 M! y    UARTPuts("upp_prog_dma_i\n",-2);! V% c: Q) v% `) d" I2 [: b" o
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;* u/ M; m8 ]4 r' C* V; }
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" M( \7 n( U! G. }9 q' g7 N; X6 P, v    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" E' M9 k5 ~# o4 B* F
2 {4 j! d. a/ Z/ R4 E! t3 L
    /*等待UPP传输完毕*/
2 U' i8 r, t) P2 t6 S    //i=0;
7 S; `6 N7 {3 D2 i( Y: T% I    //j=0;
3 ?+ ?3 f; W& a- P    while (upp_interrupt_count < target_int_count && upp_error_count == 0)4 g3 f6 K) m% P$ x8 w: H
    {
" q8 i0 y8 a8 y, |: q! L, `        /*  测试UPP传输的同时操作普通DDR数据; _' ~0 I( ^+ W- ]
        temp=i;4 o5 V$ {# N/ O
        i++;
9 O7 w1 G$ X8 i2 h+ l. s        if(i==1024), X! Q* w- T1 z  ?7 C
        {
' m! K( i4 |  A- U& x& k% _            i=0;$ Z6 H7 r+ ?+ u9 r0 v  [5 b3 {( {
            j++;, z. x) e$ O' ^" E! s( L1 g
        }
5 R: W! u- g- v        */
4 U- n: K/ `7 K' o' y/ l# ]) m2 w4 ?
       asm(" nop");
; W1 j3 Y$ i$ c: {& m6 B0 x0 A; h; }- g# V
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 v4 n1 ]$ [* H7 q  X( n
    }
/ r+ J% H0 _. H8 s8 n6 N4 f
0 f; y1 p9 x) E' }    /*检查UPP传输的数据是否正确 (loopback modes only)*/8 q# Z1 W' E: l6 e8 k7 v
    //UARTprintf( "i=%d\n",i);  ^3 e4 e, P7 u- m
    //UARTprintf( "j=%d\n",j);
  p0 J/ j6 T; i; E% P% O    UARTPuts("Data mismatch in buffers.\n",-2);' h" l$ M% s" V5 t
    if (upp_interrupt_count == 2 && upp_error_count == 0)) q- B% Q  z$ ~8 I) u
    {
4 B+ _' m; S3 A, R* h$ C        for (i = 0; i<upp_frame_size; i++)
; Z* P4 S7 Z* `        {! m# R5 {0 |% `  x6 L1 A$ F# W* {
            if (upp_buffer_a != upp_buffer_b)
+ E# S5 h+ n( I. X0 m5 G            {
# c/ f/ V0 V+ m+ [/ Z& g                upp_error_count++;
, R7 R* K9 N9 d9 _+ p            }
& D0 H) [" P* ?& E; k        }
3 Q0 l% a- Q% @. J+ M, U" I    }
. z7 P3 S" w- g# l
0 ^# l6 e9 {* C; @    /* 报告通信结果*/
  l+ R6 J  L) l3 d0 C  {    if(upp_error_count != 0)' L/ Q1 a) `2 ]/ i, r; |
        UARTprintf( "upp_error_count=%d\n",upp_error_count);* }$ |' q5 k$ A; w3 P" m! {% A9 \
    else
4 l/ J% O3 ^. s+ H        UARTPuts("uPP transfers complete!\n",-2);$ _3 X% O( W6 U6 o! f" x
# G. G5 Q3 k& }- T1 p
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
# j4 s& M  H4 ?/ B9 ^    UARTGets(ch,2);9 `. H" |+ O. B* H
    UARTPuts("\n", -2);
6 F+ I  _3 m5 L1 n+ Z2 }+ X
, K) U# R5 F! c# f    if(ch[0] == 'y')
# }* s8 H1 S) U7 o1 ~    {
+ n' \4 R  Z+ V. k! c' l+ {        /*打印全部读到的数据*/9 V/ n5 C) J; H9 ?# y
        for(i=0; i<upp_frame_size; )2 u/ w; \7 \7 P- @
        {! B# [; d7 s$ H  Z5 G9 A2 o
            for(j=0; j<5; j++)7 I" N% N! h0 r# A* R
            {
9 R0 G5 u* B6 r8 }                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
% S" o  z5 u! |                i++;# x$ z" n/ ?0 J! U0 R
                //if(i >= 4096)- E& V; A$ w5 R/ F9 J
                //    break;
* j% ?  ~, S8 M+ H2 j% ^- y
2 N$ v1 Q9 x# Z: o: `5 S$ G! p$ U. g' S            }  V! R3 l/ N  w# U
            UARTPuts("\n",-2);
5 w6 ^- y& k1 r  M        }
9 u3 m1 M9 U! t9 n; `    }
9 {  }7 q5 f5 |% u0 T
6 M# N0 g9 J3 ], P}
" q1 G. \2 q' J( O/ R* k) a
1 W- N, k# E; f4 U( m

/ y$ y  o7 R3 @9 ~9 b# j3 v0 C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
  J/ {2 e9 l8 O9 a* `% ?6 f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。0 H4 C& ^4 U- ~# R; K9 C7 z
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-23 04:56 , Processed in 0.043100 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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