C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6122|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:9 y- O) l: H5 u6 M' v5 }, p) S
main文件:
& n9 v! b  c  vinterrupt void interrupt4(void)  
2 e. ?* x& w3 H2 `& j{; {3 A2 `0 h. \0 g0 s9 I, H0 q6 ]
  Uint32 sample;- p: ~0 d. X' Y& m* {$ E4 V( v6 t

+ V. }) S6 F' B( B+ b  sample = input_sample(); // read L + R samples from ADC7 N5 I2 g! i8 m# X* f9 y
  output_sample(sample);   // write L + R samples to DAC
1 S* W, o' l1 j. P* C- c  return;5 {! \' a: m+ U/ {* {
}7 v# C4 G9 Z; c% g

$ s# C  n+ W+ W9 N! B) D' f$ ?: [int main( void )
2 ]" r# T$ t5 t& A" |' c/ R+ c{
; _9 `, G9 ?: v6 ^
% L2 l" j4 G+ Z( G* }: ~    /* Initialize BSL */& i9 q2 B' s$ i4 _4 w) }0 j
    EVMC6747_init( );
! d) g; |9 d' |& r. i        /* Call evmc6747_intr function */. |, `2 a7 e/ m
    aic3106_init( );
& m3 x& u3 j/ i8 b1 |        while(1);
7 O1 x  Y  n# C' y: }& Y}
  S6 P. j: i+ K* T, R7 d' P5 G9 ]: A- G  `+ I7 h

; D8 t6 {8 ]$ R+ c# h/ L8 Saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 P0 ?5 W8 r: Y8 X. w
/* Initialize MCASP1 */! U" l6 i! S$ C9 b6 T/ Q- m1 W
    mcasp = &MCASP_MODULE_1;
0 ?3 q1 P* F. _# P3 ^    mcasp->regs->GBLCTL  = 0;       // Reset
9 M7 p" e% U) U* }    mcasp->regs->RGBLCTL = 0;       // Reset RX' h" F. w0 A! H7 b7 [0 h
    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 Z# ?2 M9 }& z/ w0 ^: t$ Z    mcasp->regs->PWRDEMU = 1;       // Free-running1 |( p+ f/ I+ I$ p  _' H: q% S
   // configure McASP0 receive registers  @" q2 W3 N/ D: T
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
+ N+ }" L% a4 B! U5 W    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" G2 V% f* b. M9 H3 _
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, {+ v7 @+ ^1 j6 |. Z: C. A, `& V    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
' _9 A7 Z, N7 K& H    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
$ e3 n' M. W. E' B! z! C    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1) @9 g  k. \% O% U6 w
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& s5 Q( {9 e( Q8 X    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ D5 d; L" j2 f3 u( W0 D* L3 O
$ e4 c, @: i4 o# R( A* `8 \; |. [    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
& b( a1 F, |& d8 e- C' v  E    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& v% z9 i/ e7 r, K
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% v; \% g" w1 `( q8 C/ u
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& g& g3 J  \1 P2 U" ^0 R/ Y3 Y  J    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK7 U$ w+ L9 \9 T& o2 ~5 N
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' e3 ^6 @  F) N' p9 B    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
! k2 H1 M, x* {& g  n1 I# ~    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 b" I7 [) j4 h

! L9 z5 [% J# b! @  t% |9 d6 A    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 c8 C; p$ g( u6 G% h$ {: z0 D    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
9 c% F" O/ F* ^    mcasp->regs->PFUNC      = 0;          // All MCASPs
+ T; t  n6 [' E; ?: C    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, A/ R/ B3 Q7 Q; d; L( s+ K
& F# Z3 t2 m' j& g/ a; u2 [    mcasp->regs->DITCTL     = 0x00000000; // Not used' r1 x) U* \% z8 l& p) U
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
: E* @8 p/ @6 \% U    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 I  I4 V3 q6 L+ \' \5 p: M
8 z& v  y5 Q7 A7 F" G( `/* Starting sections of the McASP*/" @5 V, S; |7 @+ N/ X
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;   Y& @4 [3 ~* c2 s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
" ]. Z9 p0 Y0 L* Z$ ^    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 K! ?; Z& x( |4 C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ H% K0 D; \& {& {: {8 d
, H; |$ u. U0 m1 J- b& Z. ~. b    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ L- C3 {# V' a$ d3 d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# _0 c# W3 W% Q! P* T; m4 F' `    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 V& m' i( W/ U/ A. _* c5 G9 o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ ^/ U2 @# j9 v  r/ w  b( b) q) Y+ O& X/ N6 V* u0 e
    mcasp->regs->XSTAT = 0x0000ffff; 4 l0 |8 I& S8 |; Z7 w' D( T% W. a* r
    mcasp->regs->RSTAT = 0x0000ffff;
/ S0 }% V" V7 b; M* T
' \& L) m2 [/ B( c: e    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;6 S$ O. W1 \) {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 u8 X6 a8 `. e; S! }' }    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; + w& w! m( V6 z9 Y. q; Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 c( I: D6 f! O2 y* H) ?+ @$ k
/ n& ~  x$ E+ `: `3 n    /* Write a 0, so that no underrun occurs after releasing the state machine */) _/ ~' d# x" f, G( ]' b
    mcasp->regs->XBUF5 = 0;
$ i; j# w6 ?8 p0 h+ ?: j    mcasp->regs->RBUF0 = 0;  i; C: O$ P4 G& R

5 o8 O' Q& N% s% ^- H    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
1 _# M/ g# x" G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& V  K  |. d5 ^8 }; m
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : b( c6 U6 H$ g. f: w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, E# i* ~/ O" o
' t" R, E; Q" p. O( j9 c0 T, I8 T    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; p" S' G! V+ p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );) J$ E5 Y0 E- \& o+ F1 b  G9 W
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 {  e( Q* \9 B+ d% }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' w, Q. \2 u# S7 [
' Q2 y7 G$ r3 l+ W3 |  G' `
    CSR = 0x0000;/ Y% o" v  ]9 ^8 V/ R! j
    INTC_INTMUX1 = 0x3d;  j* h7 n0 K! z% r4 r# {0 w
    ISTP = (unsigned int)vectors;
0 v; s6 ^1 a5 t. U    ICR = 0xFFF0;  ' ^: [+ x, Z' G* E! c5 x
    IER |= 0x12;  9 G0 [1 c- x) D5 m- X8 F9 z
    CSR |= 0x01;    t7 _5 l0 }* G: c( A4 p
- {$ i, c" \' ?0 D
: c/ T) B: ~) H1 R( Y; ^

" @- P2 o2 L7 W; m# i, ^: z9 ]还有就是两个输入输出函数:
! A. c2 |2 L& E% ovoid output_sample(Int32 out_data)
  k. E% \' a0 c9 G, B{
6 Q3 i) v+ n, @# @: D0 v( I" g  AIC31_data.uint = out_data;  
7 d8 j: F- n; H" @' N  MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 G* a& B  z2 I' D$ L3 J1 {}" H7 ~, J4 V" F; n
; P7 f  C9 J4 a  a3 p  `- I7 r
Int32 input_sample(void)4 k) {4 u' n/ p7 y* T
{  
" M8 G/ u. `8 R, l5 K" Q5 u! l  AIC31_data.uint = MCASP1_RBUF0_32BIT;  `  U! |3 o5 L3 D9 r
  return (AIC31_data.uint);
8 M: X) q3 `' T5 \}4 f; L7 }( `; ~, ?; @2 C- |" v* D
9 B; ~% P/ r0 \+ ^& F5 l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-1-27 21:50 , Processed in 0.041789 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表