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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& z- K! V0 n0 W6 t4 |. N# l
Void UPP_TASK(Void)- R- C+ I: @3 j4 @6 \6 F$ j
{2 K, o* \) E! _8 a2 {. q+ R

6 g" x4 }0 I4 Y4 `. V7 @5 `. l    int i,j,k,target_int_count=2;
! {5 {6 I8 E8 {# S2 f* f    char ch[2];
" l3 T/ |0 Q4 Z9 P/ Y
9 Y$ C; G  Y8 q9 V1 H1 ]" g/ i3 {2 v+ c0 v% K/ K
6 _/ P& }! E- X" I" c2 R0 O5 a
    upp_interrupt_count  = 0;  P+ C: W  W' x, o( t* ~% \. Y- G
    upp_error_count = 0;
8 E& N0 T$ s4 Z9 b, u9 N: w' F" ]) R1 [2 M1 K0 P+ @
    UARTPuts("\tResetting uPP buffers...\r\n",-2);0 s% @, \3 I0 P) ?
    // Initialize data buffers) _& ^! x& V$ y$ o
    for (i = 0; i < upp_frame_size; i++)# j: }9 Q& s; f+ R) U
    {
1 q  S/ k. \1 N9 ~% a       upp_buffer_b =i;* u+ b! C6 M& k/ A( M
       upp_buffer_a = 0xDEAD;
6 G9 Y& L! b* T9 g    }. l, c  T" t1 @0 D5 {

& w. n9 Y, Q9 V8 y; F$ a    //for(i=0;i<1024;i++)
6 s4 {1 J( J& G& I- r! ]( r    //    temp=0;& r$ q' g  r8 p  Z
5 Z$ m! s8 \( Q# T
    //UPPReset();& U; B/ ]3 v7 h$ F, a; a% g/ R+ s3 P
    /*启动UPP DMA传输*/
% G; r1 V1 E8 E( S; D    UARTPuts("upp_prog_dma_i\n",-2);5 G3 ~. m2 U9 M; @5 }% E" J- w
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 e# {7 p% m, M( [' m3 _/ o    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* g8 c) _* D9 p1 ?3 i* [) j
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);9 `5 Y! I- t' y- M" ~

, U, ^" j% Y9 v* e6 J2 U8 \    UARTPuts("upp_prog_dma_i\n",-2);
, b. ^, D/ x7 ?6 Q% _    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 k( [$ X$ w* G! G1 g; i, }    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& ]2 \* w, C& s1 O    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 w3 g& W! I  l* E; d$ {6 {% M* L  ]
0 t6 q! Z* G  t) q( a    /*等待UPP传输完毕*/5 a# w& \/ `+ }% b1 z
    //i=0;$ y  k, [! p' J, `* X" }
    //j=0;' t& C7 B8 I% G1 e
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. H1 f0 H; @/ Z' D) R5 G& Z4 U    {
7 f! w0 F; b# |8 f6 Z$ Z        /*  测试UPP传输的同时操作普通DDR数据! Y4 y+ L. i3 U8 Y: U6 ^  J5 p
        temp=i;# r2 H% X" H( C: A
        i++;* X! ^6 S( P) g$ e; l
        if(i==1024): c9 _: d2 I! W/ n1 r. c% ^- E7 {
        {
& x9 \8 K3 T* [            i=0;7 K# e* |( _8 q; c- |
            j++;4 M/ a1 g1 F/ z
        }& v1 n8 _! F. t
        */- @& e* F) Q2 _

% p3 u: l6 P8 \0 ~' I. m, b$ g       asm(" nop");
" q1 c# l- v) Q5 ]9 f8 g* y# H9 Z( }! S& R
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);7 c+ K8 ~: |; P: i$ [- B
    }
* y6 S: `* e' M% r
/ P! S: V7 R6 S1 E    /*检查UPP传输的数据是否正确 (loopback modes only)*/
8 ]* Q7 `" q; E1 j. C9 I: Q    //UARTprintf( "i=%d\n",i);
5 ]0 r$ y6 j) Y8 \$ `2 ~( Q    //UARTprintf( "j=%d\n",j);  b; f" E. D! M
    UARTPuts("Data mismatch in buffers.\n",-2);
% M+ A5 i7 l, {    if (upp_interrupt_count == 2 && upp_error_count == 0)  x5 C  Q. x) U/ q/ {" ~
    {
5 |8 y4 Q) q7 J        for (i = 0; i<upp_frame_size; i++)6 V; \  F8 Q% t
        {
' k$ n# S" V6 a* ]2 z            if (upp_buffer_a != upp_buffer_b)6 p+ c) W/ c! `3 |9 F+ R
            {
8 f1 O& }* D2 I, M2 p0 i+ N                upp_error_count++;
; S  f2 }& b/ H: ~            }# N1 n  n, H& ~1 m
        }3 \8 B( a$ G. `
    }1 A$ U) @1 v( [. V* b  J( H9 L( V

$ |8 Z0 g+ A# q9 e3 ?/ o    /* 报告通信结果*/2 q3 k; s6 x, @, g1 z7 X- {
    if(upp_error_count != 0)
2 j& q) }# t4 i0 C: w        UARTprintf( "upp_error_count=%d\n",upp_error_count);% \. m6 g. _% h+ W
    else
$ K9 c( M9 D# E: R! w% ^/ O        UARTPuts("uPP transfers complete!\n",-2);
& I  e, O3 ]7 R: t7 |# d6 w# F6 C; C: m1 [  p
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
$ F( T: p$ M# W* F) ^    UARTGets(ch,2);8 V! k, p& e6 M. {7 Z3 v
    UARTPuts("\n", -2);7 e, \  ?& v; x0 A
( U# j$ p* B8 `, k4 F3 |
    if(ch[0] == 'y')5 L$ q- }6 p$ n* Z% B. W4 P
    {: ^/ D9 O4 N( Y+ K7 r- b# W
        /*打印全部读到的数据*/9 a. ^6 l+ g" ?; I# C( L3 p: `
        for(i=0; i<upp_frame_size; )# m2 t+ j: R. C
        {
) U2 b. x. S& r0 k0 o0 O            for(j=0; j<5; j++)8 a) X* y3 R/ ^6 A( U4 D4 ]
            {
" e; |' w7 [. N& [                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
. ^9 e, H% |+ l& [6 u0 ?! s                i++;' O* E9 N6 |: ?
                //if(i >= 4096)* H9 Q6 b- g' p4 {$ x7 @1 Q
                //    break;% x5 w/ P. N# R: n6 n# }

/ D- e7 {$ [/ l9 m& A9 q            }
6 X. d0 U( G. S* r            UARTPuts("\n",-2);
: j5 d( P6 C3 Y5 E- }2 w: H        }0 q3 w2 a3 K/ p& @9 y
    }0 ~  V7 s! ^/ r- s
, _( X6 k7 o) ?. b4 \: u
}
# w! k- v( ?& e7 v7 Y
4 M3 ?: o. z0 l7 p
/ ~1 Y( K1 _/ z/ x% @4 F0 X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。0 G+ P0 S2 Z7 q) Z: v
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。, {1 O1 O) u) W' A% `% E9 E6 v
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-15 18:49 , Processed in 0.041974 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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