嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 t) s8 o8 l$ N# b# L' j
Void UPP_TASK(Void)
+ Y5 j' K4 [: ?+ a$ h$ X" D [! Z2 N! e
{
6 g# p" m5 U6 Q9 m
! Q: ?' @9 @' j, Y: [
int i,j,k,target_int_count=2;
d6 N; h+ L. [2 q- H1 ~0 s
char ch[2];
" u- {3 s# H. _6 r) z
( M5 U: M8 y' V' z- c
4 Q1 q( t: x- g
/ o; n8 b5 _& I8 D8 {# _
upp_interrupt_count = 0;
) H1 [; v2 k6 b( W
upp_error_count = 0;
% x* D# V7 t0 j
3 b! Y1 i: J6 x% H- E+ Z. N, c
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 v9 |# C; P8 y5 N. c* _
// Initialize data buffers
! Q; R x; ~% }9 H; ~
for (i = 0; i < upp_frame_size; i++)
* @7 K% y8 P" N2 B# E/ v& W7 {
{
# g& T* J$ n- W9 h
upp_buffer_b
=i;
; @2 Z# \* a- a# d+ p% h; }
upp_buffer_a
= 0xDEAD;
+ G0 K2 U$ Z2 H0 p
}
5 O- ^' n, X, A2 S k% s
- l; g! W( q2 P/ ?
//for(i=0;i<1024;i++)
/ M' |# f# v2 U6 j* {
// temp
=0;
: N/ n7 y! I5 K; m
) a; \8 f! f W* R) u7 y
//UPPReset();
% E5 i2 }5 ?' f. f( Q: \# Z
/*启动UPP DMA传输*/
, t6 Q; x5 H8 g1 u# U
UARTPuts("upp_prog_dma_i\n",-2);
. n3 C0 M" x1 @6 U
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 o6 H- z1 m9 f
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
`8 p m2 }3 [' F' w
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
2 P2 {9 d: P! R( ?) o
# P+ r2 P" x5 M) W
UARTPuts("upp_prog_dma_i\n",-2);
% X; X5 P( j' |/ ]) W/ ]2 {
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; v5 B% P. L8 z ^. w2 u9 p! D
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! y6 x( Y3 \1 x2 |, d
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* F% n* w7 Z8 P; h% V
9 x( q" x: ]' n4 Y1 E+ {( U& p
/*等待UPP传输完毕*/
, F+ ^6 \' C5 W8 X
//i=0;
# m G! N0 M; Z2 R k4 N, V& U
//j=0;
t$ f: Q& i! y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% z' F( q0 ?/ `+ P0 G( Q3 D
{
) W+ ?6 a/ M" N' ?
/* 测试UPP传输的同时操作普通DDR数据
9 V4 Z: I. i5 q1 A# _/ l
temp
=i;
$ r/ q4 _, N9 ?/ v% k
i++;
7 r4 D' G! q1 @/ l3 {+ ~9 k
if(i==1024)
5 S( H4 K& [1 W
{
2 l# @ S4 G3 u! Z5 @# v# M. a. t
i=0;
& T5 J1 ~; p+ r0 \( ?) [* U5 ^3 G
j++;
+ @% l/ F& @$ Q* U+ E0 v
}
7 H, n/ i) a/ V7 z5 a
*/
5 p9 F7 F8 }9 O
- D. n# d7 Q# f* B9 d8 e
asm(" nop");
2 J) Q# v5 m( r$ B
- z1 A. y9 Q$ Y( f2 Q6 _
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! a% }9 ^8 I$ `. X# e
}
& N' w L6 \! u) o
& t, n* [, P9 h- a) T9 n
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 J- t5 f# ~6 V/ V. \+ s( u
//UARTprintf( "i=%d\n",i);
3 h( \' v- @$ n5 g
//UARTprintf( "j=%d\n",j);
" F; Y. C$ _' v" E4 G% L2 }
UARTPuts("Data mismatch in buffers.\n",-2);
. l4 t3 x3 ^3 U6 @" e4 ~
if (upp_interrupt_count == 2 && upp_error_count == 0)
1 W) |& Q* u; ^3 H
{
1 I. u+ L, v6 `7 \
for (i = 0; i<upp_frame_size; i++)
" O6 ~9 X0 v2 P4 P& d
{
; d- F u% w- x1 q8 A3 K
if (upp_buffer_a
!= upp_buffer_b
)
# g. p# B4 }1 p4 Y3 N* J
{
e" g. P5 A% x) _! g* c
upp_error_count++;
% A! C I* v* c% R& d* `$ P
}
* x" M8 R" ^# t" a2 n" q) \
}
8 b2 I) m* s, k9 d
}
2 Q7 W6 x# t+ c$ y5 |8 n1 M! O0 C
2 s+ j, ?) v' g2 {0 F9 m
/* 报告通信结果*/
0 w6 K# _. n9 Y+ n
if(upp_error_count != 0)
! C* e; x6 `8 B
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( l, i8 \% N& f$ @
else
) Y. r4 m3 w1 `5 y8 y
UARTPuts("uPP transfers complete!\n",-2);
% [. l+ o: A( @/ a
/ H3 R% l: `% ]8 n
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 f. O- ^$ I- v# E% |4 j
UARTGets(ch,2);
2 j: T4 w/ @ W5 P( Z
UARTPuts("\n", -2);
1 b- {4 i) H7 G4 Q0 P
! K2 i9 w1 q5 R( i; T6 ~
if(ch[0] == 'y')
0 }% Z- x! O. p2 c
{
& a3 Y' p% Z- P* z( m3 t
/*打印全部读到的数据*/
* N5 T( p8 @. c2 D* q& H
for(i=0; i<upp_frame_size; )
( Y: r) X2 w0 x8 d6 h3 h* z
{
! o7 r4 {" [8 W/ H) d; X5 |" n
for(j=0; j<5; j++)
8 s+ \1 ^2 _2 c# C4 S' w4 c: N( j
{
! V; G! j% N8 N" l( ?, ]: e0 e
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ t/ f* k" h8 c: R1 ?
i++;
) Z" f3 {6 c& { o
//if(i >= 4096)
( ]; l$ P! d: d
// break;
1 A* S( U& s+ j( v5 v
( U+ o/ }! g$ \2 s
}
. Z7 v3 `# O% E* E/ v9 p
UARTPuts("\n",-2);
) c7 u) c9 p8 t2 M: x
}
$ P8 U& F0 d8 B; B
}
$ s" J X6 M3 X
9 ~. e# s) I" f; ?/ _6 {% x
}
" Z8 T' d/ f p! s
9 r5 K0 e8 H' u& C" v/ h
+ N% J3 i! e1 u3 w b+ B# s
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" [6 n" }) @ B( P
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 z e/ T1 I3 o9 a$ @
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4