嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 Z7 }$ I7 T" t S3 Y
Void UPP_TASK(Void)
0 R- t* E! ]/ {, e. V
{
5 j4 x& s7 `: U; b, I5 }5 f
H6 ^! L/ {" j' e6 K% n5 [
int i,j,k,target_int_count=2;
* F; _4 S8 C5 v g
char ch[2];
, |2 S4 g4 u! A1 V0 E
/ D6 ]5 s- C1 m+ D+ }& v
3 X' E1 r% b7 ~1 e( O
1 K' X/ ^& J7 d
upp_interrupt_count = 0;
* X: J4 r0 T+ C1 m
upp_error_count = 0;
! f; P( G' i8 D7 ~1 Z# P
6 X4 H+ C- k1 o% c- W
UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 { K0 V" c8 k
// Initialize data buffers
" o' v- H& F$ ~. [- x
for (i = 0; i < upp_frame_size; i++)
5 U/ v8 t2 ^0 x7 ]' U' u: p
{
- R$ D+ } \$ Q" ~- X
upp_buffer_b
=i;
$ `* P) W" q6 c: h$ F( R0 p
upp_buffer_a
= 0xDEAD;
5 D+ z$ c; \, E0 C4 n- W
}
* ~' o( m( g; [& w: s, T
; f, n7 }/ _2 B7 c0 e- A: {
//for(i=0;i<1024;i++)
# y( }- g3 f2 b4 {# d3 C# e
// temp
=0;
" k! C4 ^% c# F( n7 n5 e+ {
8 |* v; Z& K' `" [; g
//UPPReset();
4 ?* Q9 w: h8 R, e
/*启动UPP DMA传输*/
. A- l" e# Y( [2 s; B
UARTPuts("upp_prog_dma_i\n",-2);
6 K" _+ U2 D5 a& u/ @
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, |; K' ^* _' o/ B
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 O; f# ^5 f$ ~# f" {! D
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 T# A, }! A3 z/ ^7 E
' q' D! {4 [4 T7 [: W
UARTPuts("upp_prog_dma_i\n",-2);
1 h# v0 j& T" N% R# V3 I
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 S$ Y+ m! R- w
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( f; W8 C/ z% u( f
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ J7 Q) F$ g* q+ H
/ \( _4 F; \+ J, g3 m. H
/*等待UPP传输完毕*/
$ P2 V- ]: {6 }' b q
//i=0;
- U' P0 r" m0 N3 F6 f G. ^% m
//j=0;
, ^ s( E; N8 O# ~- n
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ [ {; q; D0 U/ b! M5 V3 @& w% H
{
y6 e9 S, e3 X; v
/* 测试UPP传输的同时操作普通DDR数据
$ P8 n Q9 n# F. h- z
temp
=i;
9 W4 d) `; \6 o/ t ]
i++;
- T8 C& A" l* |# M7 f
if(i==1024)
* y. o7 t* w+ M5 {4 y( \1 B
{
4 l5 E; O5 z1 \# m- Q+ D
i=0;
: c9 i, j% Q/ B2 z# s
j++;
! l& W' q/ e B& p4 B
}
1 Z4 p' k( |+ t! ^& u& M
*/
8 _6 t1 x8 H2 a6 B
& N+ r$ I9 j4 j6 Y+ \1 T- r
asm(" nop");
( }& t# t @ b0 h' |+ `
. E6 Z' R' B9 D4 s; q# ^. G
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: M) u# y/ g: }
}
7 F4 A5 x6 L, _- e' j* U
2 {; W; v3 }$ L$ t4 g- T
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# x! A$ k/ J1 h8 b8 @, W% A% G# e
//UARTprintf( "i=%d\n",i);
* e) E7 |5 D# S& K
//UARTprintf( "j=%d\n",j);
2 Y1 J; p" B4 G4 l# |. w
UARTPuts("Data mismatch in buffers.\n",-2);
( m6 x' z4 x; O" w9 F
if (upp_interrupt_count == 2 && upp_error_count == 0)
. t4 H- P2 F5 R3 L
{
, g9 [# o7 c9 Q, D# J1 R
for (i = 0; i<upp_frame_size; i++)
5 B7 O& y7 [$ f/ _$ U/ ^
{
8 ?' H$ L7 P M; {4 H
if (upp_buffer_a
!= upp_buffer_b
)
. r( o+ B; K6 a# f0 t/ r
{
9 Y( c2 S8 L1 {* j& m1 k
upp_error_count++;
- a$ z; v$ q0 b1 K% M1 t, ]: p! ^
}
5 D, t. f( h8 [
}
6 b7 {3 N5 _- B- Z
}
s' Z7 ^% D. _8 C
" c3 Y( U- e0 C4 N, {
/* 报告通信结果*/
8 p1 ~+ L# i s8 R; ?+ c2 T; `" w, F
if(upp_error_count != 0)
% f0 [ m3 e# B& P: }
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 Y- y1 L6 T1 h" p" i# w
else
4 e, \% f# x( l; X' b" ]
UARTPuts("uPP transfers complete!\n",-2);
0 V9 l% h+ l3 `
E8 \# z7 l) u7 W- d
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* y6 O! r. j, u( D; d$ _! G
UARTGets(ch,2);
% D( J1 f. J$ Y5 g1 T2 C
UARTPuts("\n", -2);
% n5 t( c" N/ |: r
2 Y& H; ]( C1 _4 G3 `
if(ch[0] == 'y')
* d9 y5 |; w2 u/ `; t+ N
{
6 H" @) C1 l' H3 {1 h
/*打印全部读到的数据*/
9 a2 Z3 O: [) r% H& M
for(i=0; i<upp_frame_size; )
# {4 z9 N% |/ Z1 g! u# a
{
4 O' @, o1 y& h: ?" t) }, @
for(j=0; j<5; j++)
w7 V8 W2 X$ f# C( L
{
/ @ ~5 `& |4 d: k$ F: }
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ A, m8 P$ d* r) X: y
i++;
1 L! @' |3 k) u/ ?0 R
//if(i >= 4096)
. |6 ^4 `: `- E$ \! u
// break;
2 E) `, e4 A% m2 P- v
* j. [) r) \$ c& b) }& f: j6 K. X
}
9 X( f" W/ ]7 k4 n
UARTPuts("\n",-2);
, x+ k, j. j2 f; I3 X' H2 \
}
) ?; { J, Y4 k/ ^* \8 E8 X
}
( S/ y4 y* Y6 C+ `
- l& X, z2 v' P0 {, S' q: t
}
! _$ |3 c3 h* k" b( p" s3 `
% o3 y2 F8 L' W& A
% v1 A; H) w6 L# ~9 D4 n3 j
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* H9 _) ]6 ~, H2 J- V4 M n7 }
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 K* l4 X7 ]' s6 e
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4