嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) \% ~5 I. O7 n! y
Void UPP_TASK(Void)
! |( ~' I, \* A8 L' x8 X2 b L* p
{
( u% [/ J8 x' e2 E+ B: @) C
$ h8 m% ~- ?% D+ g- J: T
int i,j,k,target_int_count=2;
9 S$ S5 Q5 [! x( }8 [" K/ q
char ch[2];
8 h% l2 o" I) z2 b4 O- G
, A! O" p9 G/ l6 _- C j
! l! i# d2 ?5 c' r
+ T( D! p) E+ ~+ n5 C; I
upp_interrupt_count = 0;
# T8 O; P! x6 q0 w! Q; q" h
upp_error_count = 0;
* k4 c+ v9 m4 r* Q
j. E" P2 F9 `4 K5 j P+ Z
UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 u/ {# g( n- _2 p
// Initialize data buffers
/ M& f0 e$ D2 W6 W! i# K
for (i = 0; i < upp_frame_size; i++)
* g! S7 z% Z0 ], Q. ?4 b) ~4 |3 k! k
{
; _( @& V7 X, r3 U+ O$ f8 ?5 s3 {
upp_buffer_b
=i;
9 _4 J, Q5 Q$ P: T' t" P( c
upp_buffer_a
= 0xDEAD;
& b/ i( M% m/ m7 q
}
' z+ D. F/ r) h
. P2 Z0 \. b: y
//for(i=0;i<1024;i++)
; E: `7 w8 N& G6 A; r
// temp
=0;
u% O! h& A, B* D# C" @6 q4 `
7 l$ R5 G$ Q+ ?6 [
//UPPReset();
3 J5 Z& W T) J# I0 X G
/*启动UPP DMA传输*/
$ z9 [9 R( h6 E: q* K- k
UARTPuts("upp_prog_dma_i\n",-2);
& G- j) N, g" m+ J; y! { W
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: _0 l) P6 ]2 V) ^
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ T A$ i0 V; H I- k0 J
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- z: T8 J' l7 Y4 a7 `# s
5 f2 ]; p& A8 Z6 X/ ~
UARTPuts("upp_prog_dma_i\n",-2);
* I9 ^" B* O+ @- J c9 }: u
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; z0 P5 t1 R0 f' M
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 ^4 M) z2 F- _
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# w1 h3 B! C+ Z" J% q% v; \% _* J) [) l
% ?' ^6 B7 ~- |
/*等待UPP传输完毕*/
% N1 U7 m) c7 T# p9 T6 I, o2 M6 o
//i=0;
4 E3 s2 d ~9 h
//j=0;
) C' u9 _0 c; \' z) s
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# T" _1 B& k% ~- E( A6 _9 B- \
{
) V9 d, c- {! h/ b: B
/* 测试UPP传输的同时操作普通DDR数据
$ Y9 d# j! X" g' ~. ~+ n
temp
=i;
* o% E& U1 w1 B g2 X+ \9 T/ m
i++;
, a! K; E9 u9 Q
if(i==1024)
. A# y) I' Y+ C1 O; g: d5 `
{
6 ~3 K+ T5 x7 U2 \, x3 h1 }
i=0;
3 l5 p0 x7 m9 r5 s8 O ^
j++;
& ^. l- H5 N' I; d/ ~
}
+ x7 M; J4 ?- ~$ f/ c: p
*/
9 Z: o5 u* Z* W) e" T
9 p' a+ a' ~+ H% q) y% b! Z
asm(" nop");
4 T5 J9 i/ Z+ t4 B
( o9 f1 S7 |6 b
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. G4 D8 B/ |8 n2 E( ^' a% S! _ Y
}
+ A9 Y! x0 Q, F! O0 p7 s8 g7 o; @
) D, v& P& ~3 X) L$ b# L8 ^& |* n8 c4 g
/*检查UPP传输的数据是否正确 (loopback modes only)*/
) e2 }+ s- K D# t
//UARTprintf( "i=%d\n",i);
& N3 j g# C7 X/ Y4 ~8 t; r
//UARTprintf( "j=%d\n",j);
, [! X% E- ?% Z1 i* f
UARTPuts("Data mismatch in buffers.\n",-2);
$ i, m/ w) t7 n7 W9 E9 P
if (upp_interrupt_count == 2 && upp_error_count == 0)
$ y+ J! [7 z& z- Y' \5 X' Q
{
5 h1 i0 _* P) _* H/ {6 S7 t0 n
for (i = 0; i<upp_frame_size; i++)
# `4 `5 Q: Q' J! C+ [
{
7 m& o0 J8 B) u7 s
if (upp_buffer_a
!= upp_buffer_b
)
8 w8 n& y+ \/ ]* @; E
{
: t+ o3 S" Z3 K' v7 e# }1 k% I
upp_error_count++;
$ P/ f6 N8 Q9 c7 v/ q
}
7 P g2 A& h/ b: Z/ ~
}
+ N( m2 V+ m& `7 q5 X, Q
}
2 L2 `; q. Q, }( j- e! O+ r2 K9 T
8 y/ p4 L1 K, }0 v' o: ~
/* 报告通信结果*/
5 W N6 W% g4 L2 v
if(upp_error_count != 0)
% M/ q9 t: u; o* W
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ W( n- U% D5 M
else
7 m% t/ W- v! K$ {2 t/ Q
UARTPuts("uPP transfers complete!\n",-2);
. n& @8 T- E C8 A
# d y) `7 _& M( P/ {# ?
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: C" s" q+ V# |
UARTGets(ch,2);
" t3 ^8 M9 U4 Y+ O2 A- D) U
UARTPuts("\n", -2);
3 }( {$ y8 G5 H& _
4 J8 H2 `; X$ X$ N
if(ch[0] == 'y')
t; t( t% g: v$ u& F
{
5 U, j; }# I, s0 i1 t" W3 {
/*打印全部读到的数据*/
, Q* \3 g7 v# X5 D
for(i=0; i<upp_frame_size; )
1 |$ q3 i/ \( N2 Q8 k
{
0 t1 A2 U% r5 n: `4 Z: b$ ]5 a
for(j=0; j<5; j++)
' g' A0 Y) J# f7 v: ]- L
{
9 M1 b5 F$ r3 k" c( H7 k
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
$ J1 u( |1 G, \1 m& S
i++;
- I; }: G7 |/ D
//if(i >= 4096)
5 }0 E. g2 O* j6 l
// break;
) u3 d* p& a# d! X: `& ?
% Z c! g4 g0 e$ k& T. H {
}
0 o( q, H+ r) q5 |5 X
UARTPuts("\n",-2);
3 B/ G5 U& z( g7 x/ K# B+ R4 `
}
; m. x* G; A8 r$ T3 I! M5 E4 k) [
}
+ F2 b( F7 B! z/ O, k' d; Q5 B
6 {+ \7 {3 Z5 @8 J
}
/ W- ^ u1 K7 f4 y8 P3 G2 Z+ e- E
% s; ?- B- M M
# {4 j' ~* a, Q6 _
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: G& s1 K% v6 N' Q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 P6 x; O; R/ G) H! B
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4