嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, d! E5 l0 N" d- s' w3 `
Void UPP_TASK(Void)
$ h- Y2 L9 w3 ~0 }- T
{
+ @/ _9 _" _. x+ f% q4 V: ? R
: b) S+ v8 L7 |
int i,j,k,target_int_count=2;
* h/ p8 \% p" @# ]- _
char ch[2];
. k8 S4 q9 ^- T, A0 r' | v, t( |- a
% e* Z7 g7 k2 m# y
4 \# }# y9 P( }) l
& R5 v8 @% |5 {! g$ d0 h! f& W3 ^4 m% T
upp_interrupt_count = 0;
4 M: v/ Y% B: [. b$ m
upp_error_count = 0;
- o7 M/ T, h$ H7 R+ M. o5 A$ X
! T9 g) X$ t/ S7 ^8 v
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: p: [' H- C8 ]0 C. M) S
// Initialize data buffers
1 Y3 @" S) [/ A' u9 ^
for (i = 0; i < upp_frame_size; i++)
/ U, s) G7 w" Z2 Y1 g$ |, r9 n
{
8 {* i$ c8 g( ?+ O; [# ?
upp_buffer_b
=i;
- X; ^' ~5 t4 d9 ?0 I# k" K
upp_buffer_a
= 0xDEAD;
" {* [, c0 Z3 }2 f8 J
}
6 j) R0 z% W" F' P& b# u
( K9 w5 G! P1 H7 m$ T" `4 z" t
//for(i=0;i<1024;i++)
) a5 x7 [% k. o6 ~
// temp
=0;
- x; r; A; K5 t5 c, K9 O5 [
8 h! k* }0 y: \: A" v$ p& A
//UPPReset();
* N% r2 n7 y" |" [
/*启动UPP DMA传输*/
0 ?5 v. t$ h5 S2 ?; U
UARTPuts("upp_prog_dma_i\n",-2);
% R3 ?$ `& x) ^2 x
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 P, l8 `0 f/ s; ]- p, m$ F
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, L) Q; g3 \ {% p
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% R& T; t. d; p0 h1 {+ [
8 c1 E* T0 X; S
UARTPuts("upp_prog_dma_i\n",-2);
6 E: m1 `' P1 A8 W
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. E& E# N$ \8 Q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: M C6 M3 G( l2 g$ v8 F W/ ?6 f
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 |7 T: Q" ]" z/ S
! G( |, y' `9 C Z- ?
/*等待UPP传输完毕*/
; i: G/ y r# w
//i=0;
+ i2 {& X3 w1 v3 F' W6 I
//j=0;
5 P7 P, G, f& ~. j D1 i& r; z: A
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% ^! `& Y& p+ D3 k* P& W
{
' A% f1 o. W' `' G, c
/* 测试UPP传输的同时操作普通DDR数据
0 ]( J: r) f+ H$ Y6 R
temp
=i;
8 }$ @1 O1 Z& m' u* M
i++;
% ?& C9 W: M5 a* c7 }! `" R
if(i==1024)
" D' `3 _0 P, m+ b( @8 z' A
{
2 i$ X$ [2 p( I
i=0;
% E. ^9 e9 g+ h, g* m/ @. Z
j++;
6 _' c& V( h8 J9 z9 q
}
# ?8 S4 {4 s$ k* |& S N. m7 Q- q+ _
*/
& p+ y+ i8 f0 x" _8 f, ?) m
1 W& u/ f$ w2 [" H5 Z, Y
asm(" nop");
' F3 f4 J% Q2 i; c. D& o* h
7 M* C4 s- Q( `5 {, M
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
4 \% S0 A3 A$ o! }
}
5 L2 A: I: c- F4 ?1 o# o5 [5 n. W
% k% G' X4 G% z
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. e! G' x# `+ u( ?
//UARTprintf( "i=%d\n",i);
! L0 V7 m6 m7 t
//UARTprintf( "j=%d\n",j);
( }- d7 e8 y: N, D1 I
UARTPuts("Data mismatch in buffers.\n",-2);
* c1 e) M' R) t; h% y+ y6 ]
if (upp_interrupt_count == 2 && upp_error_count == 0)
% X% y. k& x" |
{
$ a9 w6 g- W/ H9 y$ \' W
for (i = 0; i<upp_frame_size; i++)
7 T4 E9 D8 L' }/ U* ]
{
! ?( W+ d3 Z |1 ]6 q
if (upp_buffer_a
!= upp_buffer_b
)
) B, U9 z) W L E% R% I1 e! N
{
: O: ^4 ^6 f+ j C% U9 `/ l
upp_error_count++;
' x$ x9 y- M, {, @) I
}
1 Y7 a8 ~; q, a% U( P) j6 r
}
4 z9 P* c9 G2 A! _, {
}
0 C- M9 i% H6 c' P* U$ q+ @$ o$ a* \
0 V6 k8 e4 ^4 e# Z+ S* J
/* 报告通信结果*/
. A% u9 U. d2 x' ^# R, S
if(upp_error_count != 0)
$ H: L. M: l: z1 M X& f
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* d1 V1 ]/ o6 A6 w, H4 U
else
# y. K: S9 ?9 c5 i& `: o: o
UARTPuts("uPP transfers complete!\n",-2);
6 J4 c* @: p+ s8 G7 W
+ L$ c3 O* @8 m+ ^( p
UARTPuts("Do you want to print all the data?(y/n) ",-2);
! |2 J7 |+ d6 t! ]' Y
UARTGets(ch,2);
# }& Q+ D( t4 R/ b! B% k
UARTPuts("\n", -2);
2 \2 e4 P! g: y
% g6 z$ a- F' r, P8 u
if(ch[0] == 'y')
& S7 P+ F- ?! O- T& ^
{
5 t# c3 F8 Y! z6 ]8 B
/*打印全部读到的数据*/
% D( P, q d. D9 u s0 F* Y
for(i=0; i<upp_frame_size; )
1 c F$ k9 y" ~% K
{
! W8 \% T( |' z
for(j=0; j<5; j++)
# j/ u) w g6 W1 J
{
1 j" w( y2 l6 @& d, F+ x. Z
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# }- I0 n) e2 c3 K; J5 l' M# P
i++;
2 t5 W d( ~9 [* b
//if(i >= 4096)
5 X# V0 D: n! u8 x" i
// break;
$ p* y7 V: w0 f8 K
* x3 N/ E9 w7 f6 l: U2 {
}
3 v9 ?! W2 w3 c! `7 R( U' R
UARTPuts("\n",-2);
7 Y* i- ^4 D+ l9 C3 t3 A( j. U8 |
}
$ D3 v1 Y9 j9 ^3 X' _+ I C* {* o
}
- }6 |& }. h; q) \* o8 R
. I& X" ^8 T. c+ c: ^
}
~; O5 \7 R" S f5 U6 o s- Z
3 I) L& T: I: m" s. v& w: v2 F6 M7 J# t
9 R O3 q) @+ [6 i& f# ?8 ]
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. r2 x& [! j2 X& c$ _
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( i+ {+ s4 V: O5 Y3 o; V0 D# w) [
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4