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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?; ]; [* x7 t; ^2 j' [3 m
Void UPP_TASK(Void)
2 P% F+ `9 u  d{
+ g) P6 S7 p- D  R  L4 |  M8 E& l- _2 C! v: f
    int i,j,k,target_int_count=2;$ X& C8 g  a' N( K' w
    char ch[2];
9 l5 C1 {' ?! `5 a( }# ]: F
! @. p7 O% U5 k5 i) z& J" \' E8 G: p  C" U

/ g  t9 h' O) y9 {; O    upp_interrupt_count  = 0;
$ ]% b) X4 h8 I' i    upp_error_count = 0;
& W0 R& K2 d/ B# D6 L4 |, F0 L9 R0 W: o/ l
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 X, M, j8 P  }8 c! w: b/ O, q    // Initialize data buffers+ Z" l5 ~3 _& @
    for (i = 0; i < upp_frame_size; i++)& j2 D9 |$ h* F9 u  ~* I
    {1 \7 }; K8 G" w8 i; J! P' R+ X6 F
       upp_buffer_b =i;
+ `! B, \0 `! M9 {; P2 y. I       upp_buffer_a = 0xDEAD;! y: X( `0 T6 U$ L2 _! s' |4 |
    }& [3 m- }) x7 F& l+ N! `- ^

$ {4 T5 s! e. u; i) x2 E5 d9 T    //for(i=0;i<1024;i++)9 j/ ~% U+ @7 O2 X6 T% i
    //    temp=0;
# H" Q$ g: S) u- a5 B1 E9 ]7 o  J3 U9 e. t- _5 H4 n
    //UPPReset();1 a+ v. u3 r  [" j
    /*启动UPP DMA传输*/
5 I- B  r& z. v4 V3 z4 Q    UARTPuts("upp_prog_dma_i\n",-2);2 H7 X* i0 W$ ?. B) ~8 \/ h5 ~
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 Y: Y* T+ G% s: e0 ]/ u    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 s; J" K( H( S$ p& ?8 y    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: b" w' |0 T) x. q
% U" A0 T9 u- [: f# \3 @. |    UARTPuts("upp_prog_dma_i\n",-2);
1 ?9 A/ s; J- ]% Q4 v( C* U    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. ~: x2 t6 w* G8 Y% f# I) k    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ I/ d( @) f. z6 i. L
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
& o% J7 ~' n1 b! z9 a
1 ?' y9 T" D) a    /*等待UPP传输完毕*/
5 U' _6 n9 I; u+ V, e7 W; V    //i=0;, b' c- C+ G2 U: t6 n/ ^; _2 g
    //j=0;
: `. i6 u9 D  ~: `+ y$ G% ?    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
& \/ j3 D# r( f) R. B! S, V    {
9 Y! w! U/ S2 `. ?        /*  测试UPP传输的同时操作普通DDR数据+ U0 V; p) Q1 _6 I( g
        temp=i;
& ~- ?2 \& @8 B* |        i++;7 o0 k4 x: ~" M# L, |6 F# o6 Q
        if(i==1024)) S/ t3 @3 S$ r: ?5 ~' U
        {
5 y! m, b7 H6 }6 h( X2 q            i=0;
! d& w5 g- P# y8 T) E( I, D. h$ U            j++;' g0 U% e  U9 ^) x- m
        }! ^2 l5 x; t+ n& a
        */: W) `. S0 L: R% I6 {! A3 I
4 r; p8 ?& d6 j8 I) W" N. q
       asm(" nop");
3 Z  a, P0 \* t- z
" F- X  V1 M1 j( D0 g8 [& a2 ^/ z       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; s$ I* O7 T7 v2 V4 _9 n    }' M* |! X' c: L' z' _
( z) c4 z; R0 ~9 ?; s
    /*检查UPP传输的数据是否正确 (loopback modes only)*/; J+ _& a4 j( J$ b. s1 q3 E
    //UARTprintf( "i=%d\n",i);
+ B: ?: S& _3 q7 f. H6 r; O  v$ a    //UARTprintf( "j=%d\n",j);  Y- G: P" B) ?; N* Y
    UARTPuts("Data mismatch in buffers.\n",-2);) i8 O+ ^7 l0 ?' S
    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 a8 ^9 h" ]0 g7 [/ d4 @3 C    {
) C3 L9 z8 [$ i$ x% i% Z- w        for (i = 0; i<upp_frame_size; i++)
+ h% P8 y& n4 D% B; E7 y  h        {
  {. j/ ?# q* G- a' K3 k$ d            if (upp_buffer_a != upp_buffer_b)  u$ Q/ ?: H2 R6 Q) t
            {
: m1 p* w: M1 D6 c' k                upp_error_count++;& F+ P& [( G6 f  i
            }
6 ?5 n+ w2 w% i6 v4 J/ Y* b& H        }. v& V  K" Z1 }8 E- U+ S. |5 r
    }
1 `( x6 p5 k5 P$ l# ^' `" u1 E  q9 t4 k1 e2 N
    /* 报告通信结果*/: l; Q% k: Z5 T9 L7 A
    if(upp_error_count != 0)
! W6 _, Z& h' ]5 i5 `        UARTprintf( "upp_error_count=%d\n",upp_error_count);
! N1 g* T! Q% ~2 a+ [$ t* `    else
+ i0 j) T' I) v+ N0 X        UARTPuts("uPP transfers complete!\n",-2);
7 \) @. I: O7 @8 _0 v" x9 \* m1 b) s  q  b- R$ z/ \0 l% g# i+ {- y
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);0 {' M5 s) n/ N
    UARTGets(ch,2);
6 b. t* {+ U3 i    UARTPuts("\n", -2);
* Z! P9 |, H! J1 r% I
3 b" L! Y4 `+ D    if(ch[0] == 'y')) s% Q( K% k, p% ?8 d
    {
1 i  |% ]8 ]( _' C        /*打印全部读到的数据*/
5 c! N8 ~& Y% Y, Y        for(i=0; i<upp_frame_size; )1 d" ?# x* C. \1 A
        {1 j+ {) P, F$ Q
            for(j=0; j<5; j++)
4 V6 T' ^7 n3 u+ n' A            {
& [3 N/ G. ^8 O/ T                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);+ W3 q3 q* M- C5 T+ |4 K- N7 S
                i++;
9 C1 d7 ^0 Z2 a3 x0 e) x                //if(i >= 4096)" N( n& [: g4 G" \' E# t! o
                //    break;- E$ E" A! K6 B; E( E3 V
0 @+ D5 U3 i% L: X! N/ |) j
            }
# a! U* M6 G. b            UARTPuts("\n",-2);
2 o2 n/ H; ?! C5 r' J; @1 I        }; x" ]( e! x, J/ ]
    }
: |" w) S" W, M
. T2 _2 M( ~, H- O) r}

6 X3 L% m# \; ~4 a
  P/ ^) ?$ r8 v6 a% |5 y: L' L6 T
; F: s8 K' f( Y! F) J, n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。' A7 V3 U9 ^# @9 S# b4 F
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 J& e; B7 M; [% z3 |- X+ Q
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-19 07:21 , Processed in 0.038603 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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