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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, p+ D* ~: v5 x; W! a
Void UPP_TASK(Void)9 J5 A; e4 ?+ n& x+ Q# O
{1 l5 n" o0 b' m" @* g
0 X8 ^; \6 e4 @  w' u: B
    int i,j,k,target_int_count=2;) W# S9 F3 @; C8 Z
    char ch[2];
4 ]( P$ ?! H; L8 r6 ], Y% z) v" t! V/ d0 [
6 n% @) J( y' k( }. {0 x9 m
0 w% s) n' Q2 @* ~& p* S# ^5 T
    upp_interrupt_count  = 0;2 X7 W3 _% O: I+ u5 a6 `* h( T
    upp_error_count = 0;, U1 P% G4 f$ ~/ l& D8 g2 P5 V& M+ D

# r+ q  c1 s+ ^8 ]7 e    UARTPuts("\tResetting uPP buffers...\r\n",-2);6 n8 b+ u& [1 r+ t8 S$ z% \
    // Initialize data buffers
  ]: Q) F% K# |) l3 f. j    for (i = 0; i < upp_frame_size; i++)
5 w6 B  |2 Z# J2 T& N    {
* t* S. S- h* k. h) k* h9 @1 G& Q  J       upp_buffer_b =i;* k* A" R! [3 S. I1 `# A! ^1 R; |
       upp_buffer_a = 0xDEAD;8 u0 o) W& o* C. V( ]
    }0 K7 ?& u& U6 n/ ^: \9 F) r
8 w: C4 c0 ^9 a5 h
    //for(i=0;i<1024;i++)
4 @+ u) U4 M, U, N4 K7 y, `( J# C    //    temp=0;" C: {- }1 ~6 I. G0 y" h/ P1 M* h
8 m$ @% D2 m; b/ S$ l
    //UPPReset();
, F& H9 T$ w0 m    /*启动UPP DMA传输*/
/ x9 D# I5 t8 ^8 e7 Q( f    UARTPuts("upp_prog_dma_i\n",-2);$ H% V( [6 E, M# C- Y4 X% C
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;) r7 l* w+ ^8 y1 r
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 M- n# w( X* u: Y/ T" c! ]    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( L) A5 N7 f! ^$ Y6 R7 K6 X* P3 F
0 o  V' K( U4 s+ x    UARTPuts("upp_prog_dma_i\n",-2);/ T9 {# q5 l& X1 G# i. r
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 a0 [. `& P$ o) ?    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 H, e3 v1 E$ h    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
  e- D/ |9 e" N0 g  P! Z! F" x$ |" ~' d+ Z, W
    /*等待UPP传输完毕*/
4 Q1 E! d+ n* w6 _8 o0 m, T    //i=0;
$ N7 U5 i. B- l4 N    //j=0;! m) ]" g- i" w/ I+ T
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)' b1 D1 f, G7 W% H6 ^$ [
    {
" M6 O; |- k  u9 i8 |        /*  测试UPP传输的同时操作普通DDR数据5 {* k3 J- e/ @- A# n$ e4 b
        temp=i;
- D( F( L1 D" w4 [, O        i++;9 H  n7 l  G& Y- Q* D- V2 t
        if(i==1024)( G$ {2 q9 o6 |" T( I
        {  x0 w% ?5 L- ?- \! r2 H6 j4 b; `
            i=0;6 g( c% _) \8 z' U& I3 ^, f
            j++;
# d/ t' e! Q6 ], ]( ?+ B# [" F        }
- M0 G, K6 [0 u        */$ |) M- \- K8 g# X' B4 r+ w3 s
; z2 W# h# M& O$ P  y: Y' m
       asm(" nop");
" j  m1 |0 `1 r" i$ M: E% m7 ~9 J
  Z: U4 O$ \7 J% e, X; Z: e       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);! q: {9 z/ e( R: e- A$ q7 I; l
    }
1 ~7 C) @, n# H( W: K  z" X3 z6 g; H! _' G3 C$ A: H: H. ]
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
/ f4 S5 b: X% x! E! F5 n. B! q8 p    //UARTprintf( "i=%d\n",i);) r: O" }0 ]/ B* L$ t
    //UARTprintf( "j=%d\n",j);7 f0 y$ k; `/ h3 J% O7 c+ e
    UARTPuts("Data mismatch in buffers.\n",-2);: g& }& u# L6 }; x! h& o) l
    if (upp_interrupt_count == 2 && upp_error_count == 0)
' T& C" Z0 f7 I3 j; W    {
) {- h, ]4 O, ~$ T        for (i = 0; i<upp_frame_size; i++)
. e/ V0 G' n; Q# R6 p        {
/ c: V/ {0 G" b; N  O$ e1 m) t            if (upp_buffer_a != upp_buffer_b): z0 h; `6 W7 h* f
            {
7 B' z  j( M. R" c/ w, B                upp_error_count++;  S4 L( W! h: h- y6 g
            }
: O" p( H! e, n. u/ h        }
- \- x3 t& ?8 f# `: n( r" Z    }- W' A2 v$ l% D5 S1 z2 D
/ U8 C. d" y/ t' m* Y5 z; r: s2 r& P1 U
    /* 报告通信结果*/
) A7 Y7 i0 M9 L* E( z0 s    if(upp_error_count != 0)
$ @; U- U: b0 Q1 C6 E1 ?        UARTprintf( "upp_error_count=%d\n",upp_error_count);
* Y6 }: u( L5 n( j5 s) \8 ^) v    else2 l/ K; N/ A# M, J0 c* V: f
        UARTPuts("uPP transfers complete!\n",-2);
( G& @( N5 B" ~+ `/ Y
. Q/ b6 t2 }, r" ~    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
) H7 D- I! O1 E' y; }  H4 U2 M7 j    UARTGets(ch,2);1 [* Q; V& Z/ a+ r
    UARTPuts("\n", -2);
% h) u1 H1 s4 k% A5 N( M9 \- G( ]8 V0 j
    if(ch[0] == 'y')# O4 }) a2 h& S/ c  m& t' C
    {
# ~3 `& F4 V6 \) Z/ `5 V/ y4 q        /*打印全部读到的数据*/
% Z4 ~4 Z* p9 `0 I        for(i=0; i<upp_frame_size; )2 N# w  w5 j9 m8 f9 b  Q9 E' z
        {
& y% ]4 }3 I4 ]            for(j=0; j<5; j++)
* n9 j+ D0 }' L  @$ D6 F0 z            {1 i' g' I1 J; F# P1 A
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);! d1 \! S7 d' E8 @/ g
                i++;
, a! Y) J& U: L, q& z" I* i; y' {                //if(i >= 4096)
9 k( r, ^! r+ S- F: x                //    break;
) E( `' a( N4 ?0 k. Q6 l
7 I4 U5 u5 I' `' H            }
' y+ {8 f" |1 A! [: ^3 `  U) ^            UARTPuts("\n",-2);  Y' e( e% G' w: C5 m  _
        }' D# z  }: t- r. w
    }
; M7 F  q. W7 \) I+ k# W
. I. c, x( e& |+ m" Y! O' x  `}

( g" P1 m, g0 Z3 i

7 q. G) Q) t. q" J6 I' m' u  n
/ P' X1 ^# |+ X* t0 X( S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。" P- s/ u2 A' I+ k; k3 p
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( X' \9 K& M) T' N3 A
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-4 12:29 , Processed in 0.037847 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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