嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 l8 C% x4 ]; ^7 Z7 a: g2 @
Void UPP_TASK(Void)
9 |1 S6 ^7 y' z
{
4 r2 ~- x3 B6 t/ ~$ P. j; P6 h1 r$ v
0 q3 \, t/ o, l! j! _3 ^/ F( H
int i,j,k,target_int_count=2;
2 p" B$ E) ^0 L. Q4 S1 C1 }
char ch[2];
# V/ t$ c2 _$ \/ K! D: J f% d$ d
; M8 B; d, Y0 U! Z0 x! G% w2 I
4 ~! [+ v& t0 |3 E& p
K$ b6 {$ P& H) G5 ]+ C
upp_interrupt_count = 0;
$ w- {( q! ] Q/ G
upp_error_count = 0;
4 U5 u1 c6 p- f$ M
F+ y/ X0 e, r4 G9 V
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' \0 e7 s$ }& G7 ^0 d, V
// Initialize data buffers
3 W0 P* f4 h0 h3 |# ]
for (i = 0; i < upp_frame_size; i++)
" W% Y! f$ A+ [- s4 W) v
{
# _2 ~6 P1 S# R! o2 `
upp_buffer_b
=i;
6 F Q1 z K0 r' G( X3 s
upp_buffer_a
= 0xDEAD;
* X( y8 y4 }+ f, _; j0 N1 |
}
# h, E1 T4 E) U* u
3 G1 y* B9 P% s# ], ^9 s L' \
//for(i=0;i<1024;i++)
- @8 P8 I2 x: r* O
// temp
=0;
# p4 l1 ^' w6 ], G: Q1 v
0 }* O1 V5 p# E; q H' G( M
//UPPReset();
; F' I. I( D1 t( Z8 N
/*启动UPP DMA传输*/
5 V1 F/ f, C& M/ d
UARTPuts("upp_prog_dma_i\n",-2);
/ L, o1 i! ^) f- R8 n9 r
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- E- p$ y: u! x6 F- _" \8 m7 m% ^
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
J1 N4 `' Q: T' v, h0 I
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 K8 b: Z& o8 P* D
1 f7 M- Q, l. _9 j1 ]! n2 {" t# U) i
UARTPuts("upp_prog_dma_i\n",-2);
/ d$ D2 Z- M3 h1 p. e7 Z0 w
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ B+ k' i, U: ^
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
a! o, l9 y" ?" F- G% ~- r
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: h1 f5 @$ H7 Y2 {
4 P C. F1 D9 _; c
/*等待UPP传输完毕*/
# V! c3 ]; H; r8 A y1 f1 y
//i=0;
$ K* F$ q, B% U- T
//j=0;
) A0 m0 m- O P/ Q% t% p. i2 T
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 t {' W8 M; f$ w8 P9 @ f7 u
{
7 k8 ]' s7 V4 {/ _
/* 测试UPP传输的同时操作普通DDR数据
' k* u6 \7 v! Z F6 H9 W* I% T
temp
=i;
+ v1 q8 W0 N. P% Q2 X; n0 C. ]
i++;
( P+ o3 T$ Y. X% U5 Q- a
if(i==1024)
! K) L; {# a' `- n5 Z0 Y; T S& ~
{
+ @: V( j: ^8 C# w- g
i=0;
! }7 V. ~# g$ `/ r( S
j++;
( W7 f# w6 L2 l7 z6 }
}
2 n. `: p4 B$ r
*/
/ E" w$ H @2 L' F
4 E3 t) U3 \6 c$ f3 l
asm(" nop");
' g" P; Q5 B) d) C# s H- A
& ]# D( X, p8 F: u
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 [- @0 f" [% M# R
}
4 L1 [" p1 D$ G
, p; Y# K$ O- a0 h
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% L, W6 P" F E& @# x) v
//UARTprintf( "i=%d\n",i);
' J3 J1 O0 F' {- s) p
//UARTprintf( "j=%d\n",j);
9 @9 O! l6 g# i. o8 ^8 g" p
UARTPuts("Data mismatch in buffers.\n",-2);
8 |/ m( ?3 F" A Y
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 H+ h/ A& g9 L* ?% b9 R4 E
{
' v- ^& f" l q6 i
for (i = 0; i<upp_frame_size; i++)
7 z& Z1 S. N8 a: B2 [) u
{
% w* S0 {. u. [0 P. R3 g5 W5 o: M- V
if (upp_buffer_a
!= upp_buffer_b
)
$ t, I& q7 w2 N) O
{
' p7 I) @4 {% H& l, J" Q
upp_error_count++;
0 I( a! ?! t( Z/ I8 ^7 k9 k
}
" S) j0 h w7 E$ y5 Q$ b! X# @6 d% T4 a
}
8 U2 s, `# t* `% U6 U9 |+ W
}
: b) f: B( K: F
4 b2 f4 O" i! ^% p! g( }- ~) X
/* 报告通信结果*/
$ Y) A% l7 i" x: P6 Q. f# K3 L# U- Q9 d
if(upp_error_count != 0)
! g# w2 o. ~* P
UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ @. n4 ]) z. @. x5 G
else
3 k! z+ R0 A, s. X* P
UARTPuts("uPP transfers complete!\n",-2);
. P, l2 v! N' ]2 m9 ]% g2 ?! f
% R$ M2 @7 T! s9 v& u2 l @" @. a
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 L2 E2 `) J6 c( A+ X
UARTGets(ch,2);
) K a& {4 V; x; F$ T. y
UARTPuts("\n", -2);
! b9 O* h% {. b! }
. H. `2 L. ]/ R8 d
if(ch[0] == 'y')
( x" ?* E; A# K
{
: Q' X1 s( w; I: }, ]
/*打印全部读到的数据*/
! C5 A ~, X& b- T+ \$ \
for(i=0; i<upp_frame_size; )
+ m, m6 p4 f8 d' _& ~+ D
{
8 ?. g& L) q% m" z6 I! |
for(j=0; j<5; j++)
/ Y8 y% e2 a3 B* m& M9 N8 `
{
: f2 \# `6 B& E3 y! B& V2 }
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
0 v: e) i! E! T
i++;
`" c$ h# B* U f7 P% j
//if(i >= 4096)
" r1 Y+ |+ S) M# R5 L/ u
// break;
$ C7 v" w. S4 p3 w7 a. D3 K
( ?- v7 j% W1 m/ r8 l$ r
}
1 o3 B7 U5 c' W4 k8 n% i
UARTPuts("\n",-2);
9 u; s1 z) s" {6 l5 a
}
+ ~7 l* I3 z9 p2 X
}
" L# J" G l7 K7 L1 z4 J
5 ]% c k2 q7 B/ u+ P L
}
4 o/ T3 y, w# P) r
1 q, Y! H1 i( V7 l5 U) _ `9 T
# u( p% S5 M/ [. r% B
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ k" `. z' A& W. [% o
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 J# t" r" C& m6 y9 u+ T
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4