嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 J6 Q! c1 Y$ [) v
Void UPP_TASK(Void)
( B* y1 v- t r8 S; N
{
2 m. d; V2 A/ U6 e: G
4 Z* v5 V, B) |6 o
int i,j,k,target_int_count=2;
: ~; W4 @ u3 J8 e
char ch[2];
$ _! z$ }- ]5 [6 s% |* y
3 D( G: L- |( c4 G
/ F2 M; d% l- [0 T0 B
1 ^2 J& S- v8 E
upp_interrupt_count = 0;
. f$ J1 }& _/ Y9 F* X, B( {
upp_error_count = 0;
' s0 V2 V6 z, m+ `0 O
- A" E" @8 ^8 S6 y- v
UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ M8 L5 l% G. [
// Initialize data buffers
( f$ A2 k7 K- u' b5 a4 a! u
for (i = 0; i < upp_frame_size; i++)
3 k$ t$ {- \* Z4 o/ d" l
{
/ C( o: q( t5 r* N" M
upp_buffer_b
=i;
" K2 ~1 P, g8 n/ v5 I
upp_buffer_a
= 0xDEAD;
+ H, u v! K1 N3 _ V( a% X; {
}
- B' r K' J/ N+ I" e" l
* C3 S/ z+ H$ [, T# `9 a/ l. }
//for(i=0;i<1024;i++)
& u) n$ i% V- X8 e$ z. x( t: g
// temp
=0;
4 y; \6 i" v* k
" [4 i, X* a# y: S a1 b; i
//UPPReset();
' m' O* \7 F& w6 m' a5 \
/*启动UPP DMA传输*/
; q: P$ b* [' E
UARTPuts("upp_prog_dma_i\n",-2);
3 Z! P, b9 P0 v$ W& r8 w& `
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
^8 ~' U3 C: t& E
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- I# S! ~* N4 U+ t
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' _6 z( f) C5 c5 `
) B6 v8 K7 v3 D+ }
UARTPuts("upp_prog_dma_i\n",-2);
4 l) S7 y, `' P8 a1 r
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 @6 @6 G: M, p( ^& }' T2 Q( h7 E
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& q$ h6 J+ a, v m% `
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 l I& p7 I1 H- ?% i8 Y. P
) t( Y% }: E4 B
/*等待UPP传输完毕*/
/ ? B& `6 v6 V) O
//i=0;
. I% B2 ]# V9 P$ \
//j=0;
' ~" M+ i: g/ G' Z2 a! N) Z
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. Z9 a2 ^5 i9 |' v M+ B
{
% T4 l' B) B8 y D5 C. {" D
/* 测试UPP传输的同时操作普通DDR数据
' p& V9 e, N5 H4 l7 y
temp
=i;
3 C! I* Y5 X7 U4 o& ?
i++;
# f- n$ E3 @" J( N% H
if(i==1024)
! K! X4 K. |2 w1 X! _( L+ E
{
- { Q( m( t0 X, w
i=0;
0 N! r, Q& [ K( ]
j++;
* Q; u9 R# a& b0 ^# N
}
, A) g% P. Q1 M. I2 H/ Y
*/
- j5 k' l% F: X9 [2 H# R# \
, E5 {; C7 W& k
asm(" nop");
: A, J# X. H; B8 D& u! R
" ?, H& \% M- G7 d. c3 H6 l2 f0 W7 X
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
{# j- S3 ^2 V2 K+ k
}
5 u6 [! w/ ~* \7 Q4 q: C) N
2 E' k6 I1 X8 {% s& }2 y% H
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ R& o& O, B) @( J- Z0 d
//UARTprintf( "i=%d\n",i);
M# S) D2 c4 s9 [3 D
//UARTprintf( "j=%d\n",j);
, J. f1 o: j% I8 l0 Y; p
UARTPuts("Data mismatch in buffers.\n",-2);
4 _2 ^5 p0 F" K; p- Y+ B; a' W0 t
if (upp_interrupt_count == 2 && upp_error_count == 0)
& }3 u/ }2 z& x, r7 E0 i: c
{
2 }$ J: c0 R6 e5 b q; f% e2 q
for (i = 0; i<upp_frame_size; i++)
- s4 Y( Y% i" _
{
! I; c$ t" k& d, u
if (upp_buffer_a
!= upp_buffer_b
)
* x+ v, l( T5 @. S+ D5 r2 S$ ~
{
& a b9 o9 f( K. U% B
upp_error_count++;
' u/ v! H9 O5 s: G
}
/ t% V( J8 o/ }5 a
}
" b+ A9 y# G& P( ~7 M @; s6 x
}
9 S5 q" O/ X! ~! @6 S0 A3 j
0 h# h8 }* o5 @9 Q" z
/* 报告通信结果*/
+ A- s) K5 I' i2 L+ {
if(upp_error_count != 0)
+ C3 n4 }1 |' N: E+ B5 ]1 w0 a9 p
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 g9 V( m. M( ~
else
% \+ u- `- L3 w
UARTPuts("uPP transfers complete!\n",-2);
5 D) O! w1 Y% p1 c$ `, C
5 K7 b8 t: X& I c2 h3 H; |" z
UARTPuts("Do you want to print all the data?(y/n) ",-2);
I0 T' t- T9 O5 M, V" H
UARTGets(ch,2);
$ N' M5 M$ i5 }) T7 E6 o
UARTPuts("\n", -2);
: R1 E+ `6 c* G
7 m8 R# a' s1 `/ h6 L
if(ch[0] == 'y')
; ]7 J0 ?" K, I+ R/ j& v
{
$ ^6 I1 C/ N3 D% ^: C
/*打印全部读到的数据*/
7 W4 w& z& r3 m( i# F
for(i=0; i<upp_frame_size; )
) n4 W# G+ W; t. ^
{
# H! x+ s3 l8 p8 K
for(j=0; j<5; j++)
4 Q7 ^1 i$ A: h8 ^+ i4 [- d
{
9 Z9 U3 i, a7 p1 P+ x1 s" {
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
" U# S: c5 m y: f( ?
i++;
- J$ ^- B. ~( h9 |
//if(i >= 4096)
) t5 v/ B, h% O- t
// break;
3 p% }$ W' O6 U
+ _) ^ u$ N3 L: ?6 a! Z$ c4 k
}
3 a0 q4 R# e0 j# |0 w
UARTPuts("\n",-2);
- k/ T8 {% V/ m+ A. W) W
}
2 x& o2 E) _+ H. U6 @4 i+ s/ B
}
" m" u9 P, n" `: A
! L# e/ z& |4 M5 L
}
' F5 e* B4 H [3 O, `& M1 V
9 c% N1 d. [6 o! c3 R
/ Q/ d! Y3 l: o0 Z2 j6 l
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 O! [2 E5 Y5 [
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 K: B( y, Z( B+ m' F [" R
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4