嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 y" _" e% h% ]3 ?2 d
Void UPP_TASK(Void)
% P `$ I* \% y( |/ ]
{
0 [4 s+ d2 q3 J; g/ q. C
! I2 {& N6 X! v* F- @0 e( h- {
int i,j,k,target_int_count=2;
. `/ I" ^ Q# q# p, q. M" B/ k" L
char ch[2];
. K. M+ W8 g$ g( d
; o+ b: S3 N$ }. q& e6 s) C
; G% J; m4 k7 z, U
6 W0 M- @$ f0 R% H: o I" y
upp_interrupt_count = 0;
+ o4 A# n6 C1 P
upp_error_count = 0;
: x0 A4 ?% r; l2 }6 c8 d2 F
% V% |/ g& O2 M" G
UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 i5 Q4 h% a# M; w, s4 V& N
// Initialize data buffers
3 A& U" n# X" }4 d8 ]4 z2 r& Y. ?
for (i = 0; i < upp_frame_size; i++)
7 l! B4 B4 c/ V0 e1 d' A
{
3 Y/ r3 C3 C: Q Q& Z! W! [/ k8 h
upp_buffer_b
=i;
5 X7 w7 n& A. T) o5 S/ m3 h i
upp_buffer_a
= 0xDEAD;
: ^' K4 |' I; W4 q. a
}
/ N& z3 ~3 h* R# E3 d! i; ?
+ j; U" P6 r; I# f
//for(i=0;i<1024;i++)
9 V# ~; o$ C- f$ p' B
// temp
=0;
* z# c8 i( o) f* t0 L; y/ r; B" u+ g8 n
8 r+ n& C+ }! S5 q
//UPPReset();
' g8 G l. l K' m7 Y( ?
/*启动UPP DMA传输*/
; U. g+ B3 ~( ^0 V& s3 Q
UARTPuts("upp_prog_dma_i\n",-2);
+ g# U9 n) H7 {) K+ O+ f h% E
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% a0 e! s) }" o) h1 E" Z, r2 X
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 K$ l6 Z- `4 z- V$ u* E3 Q" I" Z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- s2 u9 E* v0 `2 _# K# x/ W
# C2 \; L3 d6 k. j9 m) o
UARTPuts("upp_prog_dma_i\n",-2);
* V- |( I# \5 U6 D7 A6 r5 D
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ ^. l7 Z5 \& v, P
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 h: r* i! i& ]: F3 v: W! E( E: g
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' C+ `: j2 _1 |" N& P. Z9 o' b
9 Z) J" j/ P. J: R9 q. |' H* }
/*等待UPP传输完毕*/
& `# n Z [. v: J
//i=0;
& p8 {% Z) d. Y/ L
//j=0;
1 }- m. `2 u' j6 q" _( ^
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 f5 E7 `7 | y% L$ q$ S+ W
{
/ }2 o+ N4 \$ C! I O
/* 测试UPP传输的同时操作普通DDR数据
. q4 ~1 S" f/ Z
temp
=i;
/ |4 c& {+ s) G t/ Q2 g `2 N
i++;
( ^( T8 I: z" o: U, H: M& g
if(i==1024)
3 T% N) d u6 E
{
3 Z- M# K( c0 O$ S# j3 {
i=0;
4 O9 j, u0 t2 N0 E; ?/ q8 P+ n7 Y
j++;
1 ~, k% q7 f4 H9 H+ W
}
* W3 C1 l5 t5 p
*/
3 L# H% x0 ]1 c5 n# L
3 \& r& D9 z) h9 V% e' M% G: C' J
asm(" nop");
/ `$ `% |& o$ ^; N" i
; ]) N) [, ?: C3 C
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 E7 y8 s! w+ ? S! Z" l7 x q3 l1 i2 k
}
. A. B! ^7 p! w; E+ f
- y, v1 |' s2 {+ L7 P
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 X' H2 I5 G/ V1 H
//UARTprintf( "i=%d\n",i);
' q/ c/ b' o: L3 L) s
//UARTprintf( "j=%d\n",j);
% _: f) C' k1 z% J; I+ Q% B
UARTPuts("Data mismatch in buffers.\n",-2);
; C4 u: Q( r* p
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 f0 P% @( P A( W( K
{
- }' x. g' T# Y/ r) N
for (i = 0; i<upp_frame_size; i++)
0 A. k" [ ~% e1 F, ]9 v$ z, b
{
/ H# f( x( U; w& P) m: A
if (upp_buffer_a
!= upp_buffer_b
)
/ z( v! S" P3 U4 P. D- U9 S7 ?$ |
{
; W& O# W2 ^+ ^( v6 u( H
upp_error_count++;
$ h" X& E2 t5 n
}
; p7 y/ r7 _8 G, [ y3 @
}
; V( U! f, ]8 g. ~# v O9 {
}
{# e% y* O# R/ O4 D
9 d" [3 F$ b; g, t" U" r6 A0 G
/* 报告通信结果*/
& j' v( O4 f" L. I
if(upp_error_count != 0)
! w; n m% t M; e/ b
UARTprintf( "upp_error_count=%d\n",upp_error_count);
" `# k0 L: H2 S3 c6 p4 ]# S% t7 M
else
V3 W7 N- n7 h/ R5 R; x4 f$ c
UARTPuts("uPP transfers complete!\n",-2);
" ^3 j2 }6 b4 @+ o
* w+ o8 z1 Y. k0 m% a
UARTPuts("Do you want to print all the data?(y/n) ",-2);
6 u2 T2 Z& w& S
UARTGets(ch,2);
+ B" u5 N' J( l' T
UARTPuts("\n", -2);
* ?( [0 X# s) \& _9 r
. T, c, B) U6 q
if(ch[0] == 'y')
A* I% s, V. i. O' _! x
{
; e# b! W# K0 s3 t" ^
/*打印全部读到的数据*/
" |% n+ d3 F& }' s
for(i=0; i<upp_frame_size; )
3 L0 L* H- ?1 g a: Z1 K8 Z/ U! A, g
{
% V5 H6 G$ x* O# V
for(j=0; j<5; j++)
# w( D; @' t3 ^4 n" s8 P2 N f
{
' K; J$ L. R, _
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
7 ?) K5 I/ f% G. S) [) U
i++;
" A5 S3 ^/ } Y, j+ v# {7 b
//if(i >= 4096)
1 {0 g% \6 T' X4 b* Q
// break;
7 s4 E; H$ P% n' a) r: D
( f1 J8 c% p8 `
}
- M0 X: [% _0 O
UARTPuts("\n",-2);
& @; [0 s2 E; l/ n/ ]
}
0 B4 R3 E7 h: N% y3 x' S
}
+ m# U1 J: [3 W$ ]) F4 y
5 v; J! ~/ }1 b6 j% D
}
$ k; I/ g, N- [& g( R Z
M/ V7 j$ _* v |8 m4 _0 \1 e
, m, g& N- ]/ J, R, c7 |
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ }- m0 }& R! t4 [* ]& J
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% y0 U. Z' J7 h9 H
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4