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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, b7 M: }# {' _0 I6 p6 [- ymain文件:( F& u/ q  A/ f* N. K0 q5 V
interrupt void interrupt4(void)  
8 c& ]7 N! b* p. O' n{" k  [2 U& j3 V. C6 d, y- z  e* r
  Uint32 sample;; R( [6 s' {0 v6 b& a0 b, b0 n& ~" d
% h# z( P0 Z% a  @. k
  sample = input_sample(); // read L + R samples from ADC
# q0 J9 ]% I; k0 k2 C: g6 O  output_sample(sample);   // write L + R samples to DAC
' f  h8 `% h7 i! U- l' x  return;
+ o- s- E" }+ C}: h7 ]. A$ h+ }$ r# S; z  R' ^

" N  c8 a7 A& p- s8 uint main( void )8 B. E6 A0 O* O; O7 Q& ^  Y2 ?
{# e! b5 p9 R* K/ [/ A5 t

0 ^7 `. C0 _% q, q- N    /* Initialize BSL */
* u" p+ K6 c. h$ N    EVMC6747_init( );
# w+ ?) P% w; U& x, ~1 y        /* Call evmc6747_intr function */: N, e1 {# |& d5 l$ [
    aic3106_init( );! k0 ^1 S3 D4 b5 P
        while(1);( q/ U! A! j# i* C$ A9 s
}
  `# L/ s. O) g4 d9 ~; n  U. a& f0 V5 y5 F" k% w* Y- S& U. }) r" D

' m, W: s( Z4 E3 `0 faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. K9 s$ I8 G7 Y2 t+ J+ F
/* Initialize MCASP1 */
5 i9 B% {) j2 M6 c0 I# d' Z    mcasp = &MCASP_MODULE_1;0 q( B9 ?4 o" ?5 f: {8 j
    mcasp->regs->GBLCTL  = 0;       // Reset0 D; {1 q. V! o/ v4 A8 F' E, i# }
    mcasp->regs->RGBLCTL = 0;       // Reset RX
! s9 ^7 j& F6 T, R, B, O5 G    mcasp->regs->XGBLCTL = 0;       // Reset TX
2 q% {9 W  V2 w% h    mcasp->regs->PWRDEMU = 1;       // Free-running
# a5 G1 E' S5 ?* j$ o5 b% y   // configure McASP0 receive registers
* ?& k5 l% p" u4 E* [    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
, W; x; }! b0 e) c    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 q* A" s2 A! ?5 \7 ?) U4 Y' _
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
9 K# d* p* E0 M" S% o, i5 K    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ D1 N" b. `) R    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
$ W; Z: a! d' g* S: X* J1 Y    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
7 W/ `5 V: |+ @7 R  F5 A% M    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& N& T% T! F% r' K    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. ~7 ]5 O" Y$ k5 q
6 z6 E! [: m  i1 q7 Q3 U0 R    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used% L2 Q) m( f& ~# A2 O0 \7 c# T) g
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( {  g7 L1 Z$ m3 m& K    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 \" h- A2 H. e" _" I- S
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 x1 o' |/ l, u7 {6 @* r/ r; S    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
' w2 X6 j4 R9 y3 J( t$ a    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
5 I4 [$ i+ O7 d* j    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: U3 W7 V5 a  l( w1 j+ {6 q6 b6 [
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% T7 d1 ^9 G( j* N

, }. ~5 k( f' n( {& b! s3 E    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
4 C7 ]5 z* h/ b" k3 z" a# k    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
* n5 z' b( z5 m1 p    mcasp->regs->PFUNC      = 0;          // All MCASPs
% H- n% k! _) E$ y    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 Z, k. Z5 V7 }& x1 |" e: `  I

; r% k( Z+ U/ Y; V) m3 ?- d4 g    mcasp->regs->DITCTL     = 0x00000000; // Not used
5 ^+ w0 Z, h) a- q" S" U: ?% L    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ A) {* w+ \7 m1 x* ~  `( N8 f
    mcasp->regs->AMUTE      = 0x00000000; // Not used% w9 b) N: d- D6 s% P$ \# N
8 Z: d* D  _  v; T& ^
/* Starting sections of the McASP*/+ x& @, o: a( V! F1 f; L  {
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
8 e9 S1 ]! J; g) z: j+ a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  : t3 w% A  @! d+ d& @
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
  n4 d6 }3 q- O- W7 n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 b& |6 ]+ Y8 w- m' }7 J! m
4 I8 u, s- o3 ?$ F& p    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
9 X: E! ]( j% \0 _. g$ r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: R* [9 [( B0 N
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; @4 V' c- A' z/ W8 G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 n- i' |" n9 ]$ g* l6 U5 X+ M% e* T: ]% O! K" Q/ ?0 O
    mcasp->regs->XSTAT = 0x0000ffff; 9 x8 g! n& q$ w/ ~# k
    mcasp->regs->RSTAT = 0x0000ffff; & |( w7 F3 x9 c" s' a

: F3 T1 B. Z' k0 \: [    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) J$ Y& I( k2 b8 Z6 l& L% ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, S4 q3 B: ?" y    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ R; U  ?0 ]* w  N9 {. p; X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
/ X' j8 m6 B  J4 \
) g- B8 _5 i) a, M    /* Write a 0, so that no underrun occurs after releasing the state machine */
1 y! u" o# R: k" \* N    mcasp->regs->XBUF5 = 0;
& ^7 }% H4 r( k' H+ n- R" c, e    mcasp->regs->RBUF0 = 0;" Q5 k& b. {- ^+ x) n) K. g1 H

9 i5 P. v5 u% o3 i- `! G+ Q    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; & P: y' U5 _3 o; ]$ w1 P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ E6 g  z) P9 V) Z    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : G' s, P1 v) ^+ k8 s" S  |, l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) T( |* C4 y4 B4 L( ^# u
3 y" o( s$ x" T; O
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 ~1 V2 n5 r) x) W* ]; ^0 ?; X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
& M% ]2 e# q5 z- X    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 n- ]- \2 ?3 e' _3 m- ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 M+ C8 Y* l- b$ k" }% l$ L: p
. l& y1 X# |' t: W) N, o
    CSR = 0x0000;( |" e; Q  V3 |( @% U
    INTC_INTMUX1 = 0x3d;
5 D9 [% U: u7 B    ISTP = (unsigned int)vectors;, J* D+ k- y. ]5 c% L
    ICR = 0xFFF0;  
4 w3 ]/ |; m+ Z    IER |= 0x12;  
) {/ I4 s9 N8 O    CSR |= 0x01;  7 N* J. f; ~# w! V- u

- i# ?7 p  a; P& @& Q1 q6 T
  Z7 V" J2 h- x. O% c8 h5 C8 J6 J( [
还有就是两个输入输出函数:( q; s' E) D# Y$ B, b
void output_sample(Int32 out_data)# R6 \1 e  C8 T2 ^
{1 H4 o* j! L* U
  AIC31_data.uint = out_data;  % r- S; ]/ t" q3 K  y, D
  MCASP1_XBUF5_32BIT = AIC31_data.uint;, D# I  y4 I1 P& \! W! t. @' R
}
7 u. d+ S% S. N8 O2 x7 `( H) D( K% Q2 ]6 d" b% h0 Q; Y
Int32 input_sample(void)/ ^8 ^8 Z8 t& H6 ~. e! ~* \$ I4 }. O" M
{  1 v3 _2 ]$ m; U' R% G0 B
  AIC31_data.uint = MCASP1_RBUF0_32BIT;5 [& l/ q8 n' ]5 T/ i1 x" V
  return (AIC31_data.uint);
$ b' W8 \6 _3 J6 M! j}
, P9 B5 ^! y* p# F7 G. w: `" A4 `) ^8 j
分享到:  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-3-10 04:52 , Processed in 0.045932 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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