嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; T2 ]% t0 ]4 v8 ]
Void UPP_TASK(Void)
" C4 Y6 E- U5 ?4 l, V+ v
{
3 |3 M0 c# {$ B, o! }5 H2 ]* m( W
# K$ a7 m: s7 E8 q( k
int i,j,k,target_int_count=2;
; b$ w. J: g( u7 w- e) I3 Q8 u, g
char ch[2];
9 e& ]; f' B1 o" O( }! g0 ^1 n
- m( a, b1 Z' @
9 R+ N0 _$ G; `% e
, j$ u; j0 a. P
upp_interrupt_count = 0;
) ~9 c/ X; F/ \ Z% v
upp_error_count = 0;
! C. O2 \# H+ E- c' n; K5 k
# v; P# ^ J) [+ l# }- k
UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 }. K( C/ Z( l+ P5 Z H) q9 ?
// Initialize data buffers
& h1 d1 T3 ]2 |8 p! x/ l
for (i = 0; i < upp_frame_size; i++)
* r1 B u# M, g' w1 v; H' r) l
{
: G' Y. W4 \9 j! t& C6 [
upp_buffer_b
=i;
( o% ?2 m+ S. D6 H* D# _2 I) T# g
upp_buffer_a
= 0xDEAD;
2 ~, N2 N+ S# _! A+ s) m
}
# B) i1 e7 a( ~' F( X, X
' a0 Z# i, H! @; o+ g% c
//for(i=0;i<1024;i++)
0 J# c5 G- U% B: a% i
// temp
=0;
6 ?: B6 r1 F5 k3 s. x2 l8 v
& S( x' u; [7 q# Y, h, c
//UPPReset();
% b. | x( S$ c
/*启动UPP DMA传输*/
6 b8 x/ e2 T/ a; ^* S0 E
UARTPuts("upp_prog_dma_i\n",-2);
$ p( L- O& a) Q- W
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) {$ T" C3 q& ?4 |8 J% i
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 }6 {2 m4 W" r+ ~
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 _ W" v% z- W7 n# R; M8 I5 z* i
0 T' Q. C4 {* Z9 \
UARTPuts("upp_prog_dma_i\n",-2);
0 `( a( S1 G( g0 w
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! P P/ q+ p/ `/ s% [! Z
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 z( A: p# q0 ]% W# ~; m
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% x5 t) `7 b* R1 \+ O2 V% i. M
; h ?6 z) t6 ]6 c
/*等待UPP传输完毕*/
{; h( I1 W; Q- c, G, X! I
//i=0;
* r6 O4 ~4 G8 a8 S+ K
//j=0;
6 }, d' j0 `' N6 }8 R2 F) q6 J
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% X7 M/ u4 R, M: J
{
! f1 W6 i, c; A. m8 \- P2 y O
/* 测试UPP传输的同时操作普通DDR数据
* [; O" v5 P! H" e+ w/ R
temp
=i;
( Y1 C. O3 z7 Q9 @7 n
i++;
, n" [# G: @( ~: c
if(i==1024)
3 ]* }: c7 e+ P- I" Z
{
8 U. [) Y9 n8 G, G% Z
i=0;
/ y8 X8 `, Z7 R3 Q* Q0 t1 \
j++;
6 i! @0 `& `9 O, q! u; J+ R9 x7 O
}
, [9 }7 E. {2 _. A7 r
*/
' Z1 G2 J3 d: y! E% C* C
4 A7 ^4 \& {" I- |4 M
asm(" nop");
& ^0 d2 l# I) j2 F) \
& E* ~9 _" L3 ~; f( j2 S F. d; I
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 s; p$ ] z: V$ n2 \- \
}
1 Q! \% ]2 |; \8 D3 P; I( [' ?
' `0 [3 B6 }9 j& |8 |0 m/ ~9 O1 D0 G
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* D2 I! ]8 E) b" e+ D$ e
//UARTprintf( "i=%d\n",i);
$ D& D/ ?, E+ ~( m& e8 b9 a
//UARTprintf( "j=%d\n",j);
/ H. S* |$ s% I+ z/ V$ M
UARTPuts("Data mismatch in buffers.\n",-2);
2 P ]4 { H/ H3 t
if (upp_interrupt_count == 2 && upp_error_count == 0)
% z( K/ a; \+ F, Z) [$ L0 v: V* E
{
' H$ T7 `& T6 U1 Y+ s- U& @
for (i = 0; i<upp_frame_size; i++)
4 {+ K' C) U2 b) t- l, D6 F
{
+ [9 |& X& w3 n( f
if (upp_buffer_a
!= upp_buffer_b
)
. h. T, c D8 ?
{
; d. w: v# ~5 H( v
upp_error_count++;
4 G1 g \ c& G1 c" K- b/ l/ ?, r
}
0 Q( ]9 e2 _, b! a6 ]1 L
}
% f( J# l6 k1 X. C
}
' L) {8 Z- H U7 Y6 C
) ]" O& f6 G0 A; B. K9 H$ t. C
/* 报告通信结果*/
6 d+ z9 H0 ]: j
if(upp_error_count != 0)
; v3 n2 o& y9 W. |7 [% y
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( ?. j2 {6 i! [7 M7 r5 t8 W# O
else
5 z& a4 s- X8 J$ {5 m% k. U
UARTPuts("uPP transfers complete!\n",-2);
% I9 U0 e+ y2 Z8 ~) |3 M' A
6 J6 u3 H' q8 F) B1 i- j" L
UARTPuts("Do you want to print all the data?(y/n) ",-2);
$ g n1 m" F$ s: Z' o
UARTGets(ch,2);
; j6 \; ]2 C& j* h9 P
UARTPuts("\n", -2);
2 t4 g! n$ e; Y, J1 G: Y2 I
' B0 ]! M. {& r# z* k0 D
if(ch[0] == 'y')
# Y- M7 A/ I* o" ~+ u; b
{
4 i" w* k# y+ ~5 d) O
/*打印全部读到的数据*/
5 `# n4 h e$ q0 m1 k: J9 D
for(i=0; i<upp_frame_size; )
: A: _$ j* X, q* w
{
5 j: w5 u* t% G6 J3 i1 g
for(j=0; j<5; j++)
" B+ B6 Z, Q- y8 C6 `6 `5 t5 |/ J
{
' I, F! l' ~, B- C2 V1 E' Q
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( B- f! O5 h$ K: ?
i++;
$ C$ l) @: N6 J, }+ p8 ~8 f
//if(i >= 4096)
! Z# ~* q( } H( |* g
// break;
; G! a% S' c J0 L
" L( O; w) G. P% h& m
}
; [7 q/ f s+ Y
UARTPuts("\n",-2);
/ u& M$ p- s: P
}
7 U% X/ E5 q) M( \7 @; X
}
+ h. G; z% d9 q9 i7 r
; i9 j# r# Q5 I3 J
}
2 ?2 S8 S Q& ?! y
$ c# G! h) U# Q3 s" d) _. k- s
1 d7 i7 O* Z; w
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) o; W! h; f* a( Y
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( l8 [4 q6 b1 {# m* g; L
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4