upp问题,在SYSBIOS下的应用问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?/ T; E$ |$ N& x+ w
Void UPP_TASK(Void)
1 i7 l7 f0 t6 m7 c: S/ @" C: p) M: L/ _{  m8 _3 J5 w6 z( c
8 [; n/ L' D3 Z7 K% T- ?
    int i,j,k,target_int_count=2;, x1 `1 y$ a2 k6 y0 A7 g8 _! y# d
    char ch[2];4 E8 @+ b& [! R$ u* ]9 L3 }! g& f
2 l' n9 ?. z. @3 ], Q( ~1 y0 g
/ [, e$ ~; p) j/ Y
) V. y& a/ |8 h! R7 I
    upp_interrupt_count  = 0;- s% q1 o- c& w! M% t6 M; p
    upp_error_count = 0;6 o% G2 @. O& U" H; D) ^

8 l  Z2 u2 o+ Y8 `    UARTPuts("\tResetting uPP buffers...\r\n",-2);# w/ {, x" S5 D6 n/ L" E
    // Initialize data buffers
! W" W* M7 E/ `) B: U    for (i = 0; i < upp_frame_size; i++)
) g9 {7 U$ ~1 i7 {1 P" ]1 v8 O1 |( |    {
1 K' M5 S) y4 H3 B6 n2 s- l       upp_buffer_b =i;1 Z3 J& E- m4 H, k: e
       upp_buffer_a = 0xDEAD;
# i# t% ~9 B- {# l* Q4 i    }
2 m9 |+ A6 F& Y+ F' X3 ?% E" q: C
    //for(i=0;i<1024;i++)
1 ^& g0 D' r# x% O# K    //    temp=0;
0 ~7 ?" n' m% N$ Y5 w
& I- b- n- B+ F. k: M- c    //UPPReset();3 X$ J' A9 j. E% l7 \" Y4 T
    /*启动UPP DMA传输*/3 B! \, p" U* ]9 \6 \: J$ E
    UARTPuts("upp_prog_dma_i\n",-2);
5 h) f2 [  k; V1 a5 b, p    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;, R6 _6 A' }$ P' u4 r
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 m: n5 j. b  m9 c7 }! h2 i  g    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);( Z9 q" Q) R" x9 |; z

: `! A5 t9 Z$ O  I3 h- V    UARTPuts("upp_prog_dma_i\n",-2);
; c4 ~+ W: {' y( u/ r    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% y& h& i/ ^1 n, I* S- A0 h* a    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; `: H) X$ Y* u, N
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
  K# j7 S3 R) O/ X' Q: H
# _1 _) @6 u) v/ b3 k8 L    /*等待UPP传输完毕*/
- B& b3 q% o2 _/ ]' W* D6 m5 L    //i=0;
3 m; n/ o9 \7 R    //j=0;
: f' k5 ^3 Y' h- V. r    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; N4 V# R; a! [4 T* F, b    {
/ R6 S* b4 @9 s        /*  测试UPP传输的同时操作普通DDR数据( d! X4 X( a3 x! z" x4 y; T: M5 r
        temp=i;
6 |5 P! i0 T0 G) n( |        i++;4 n. s. I% t; C' ~* Z8 Z
        if(i==1024)
% ^% X- ~5 |2 Q2 ?6 F& u& x+ Q        {
) j, S) N6 J4 j+ x1 Y  U. j            i=0;/ k6 B, P6 T3 l6 U9 C4 M  B9 j
            j++;
- }& \. V; l) o1 N8 d/ l        }
9 ?9 H/ p: ?/ \" ^        */
5 E, n9 U% y0 C" ]9 ~# c# Y# b) W" J; _  G3 ^/ u
       asm(" nop");
, t) `9 u, R. {, e
1 O1 @% s) G+ H. a) u1 e       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);" z3 ~4 g. U) ?2 [3 U7 H) l
    }
+ q( }4 |' ], U& W
1 U7 w8 @8 _( {: A" n3 s7 p    /*检查UPP传输的数据是否正确 (loopback modes only)*/
5 m: b8 `; E0 w    //UARTprintf( "i=%d\n",i);
) d6 w5 f  Q; @& n    //UARTprintf( "j=%d\n",j);# d. L8 V9 h; b  K% f6 Y
    UARTPuts("Data mismatch in buffers.\n",-2);
4 S, ?5 y: p& h/ ^2 v    if (upp_interrupt_count == 2 && upp_error_count == 0)
2 N* i. W2 F7 `% W    {% v- e3 c4 ^; H# ^6 U, `1 Q
        for (i = 0; i<upp_frame_size; i++)
6 x# g" b" z( ^# `, ^        {0 L% v# L5 u, U
            if (upp_buffer_a != upp_buffer_b)/ m: z: I+ S9 ?8 }" g
            {, w. e/ T* u! g8 \& q6 {$ S
                upp_error_count++;
- @1 v4 k7 `! e' P' I( Z% B, v            }
( m4 t: h. W5 z; r  b  l        }
! J: l3 \, C$ {, ~    }" s2 _% Z, V! ?) O# P: x
; t/ H; O+ b9 ^/ k2 q9 }" ~  x+ I8 v
    /* 报告通信结果*/
& I3 Y" B5 i5 y* s9 E3 g/ v    if(upp_error_count != 0)% K2 a8 g6 j. v2 z& Y8 i9 }) _3 ?
        UARTprintf( "upp_error_count=%d\n",upp_error_count);& y( P2 ~0 n/ ?: v' Y. y- ^
    else2 O+ T6 t3 N& H& t: S+ X0 X
        UARTPuts("uPP transfers complete!\n",-2);
0 H- ?" g- C% O7 ^3 p' L2 w! [* h) W9 ^3 G' N: E) T" a" g- G
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);! e+ M/ v0 N% l! w
    UARTGets(ch,2);
  Z) x+ f) K; G: [' t2 W& d    UARTPuts("\n", -2);5 @# `. |+ I# x! E, K! }# ]  @
" l; V. [  u) d# {
    if(ch[0] == 'y')' s  e& ?* ~! u8 f
    {; `4 @6 e- p3 H: k% w
        /*打印全部读到的数据*/
5 s# a( t% K3 v& E+ `  c        for(i=0; i<upp_frame_size; )
: e; e5 M/ B4 C# P% H        {$ ]1 s5 v- d! H% e  M2 Y3 A
            for(j=0; j<5; j++)
, D6 P- e% a; f            {
6 c7 f& k- q: ?0 }9 u2 G7 g                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
8 S. E0 _* e0 H, ]                i++;: {% Y4 O2 B- W, }8 }. j; `1 c
                //if(i >= 4096)% ^5 J1 W: D6 C
                //    break;8 ~4 N* X. ^# x4 }+ N$ b, Q
, A9 E1 Q0 Q* [
            }
$ a& s! K, n# D" }            UARTPuts("\n",-2);
* W4 z/ L) y. l8 i( T* d/ h' A. c5 s        }% I: @+ n$ l2 q
    }
; Z, E& Z# u2 d. I! c7 K$ M  A1 A, i5 F
}
, t8 Y0 P! B1 L
* o7 `7 \$ S! D6 H) s1 Y4 ^
$ J  G  q9 w; j6 _, T4 S7 ]" k
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。4 W: z4 S( M* v& v+ j6 V
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。1 q4 d0 K: g1 [! I
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-17 13:51 , Processed in 0.043715 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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