C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, @7 h$ D1 o6 u, u
main文件:
3 N% e  b' }$ ]interrupt void interrupt4(void)  
7 u! Z0 ]4 {& P- ^  o7 `{5 Z7 A1 H( Q4 A6 |1 J2 L5 F
  Uint32 sample;! n: d% j" t' o6 K, n' ?  c
. ^) Q8 o7 Q% \0 F, ]; {, A
  sample = input_sample(); // read L + R samples from ADC
0 Q0 X+ Z& i; p7 g1 m) D5 k9 N" R+ W5 `  output_sample(sample);   // write L + R samples to DAC 7 g# r  ^. B$ e6 W3 F5 a
  return;
4 \2 L) R4 w3 i. Y# b' m% p/ v5 A, L' F$ o}
3 N. Z. M9 u5 \
4 Q( y0 C% C/ m2 `+ @int main( void )% ~0 @. w4 h! H  M
{
  z/ L( I3 y. {8 _. N
* s4 w- f6 X' a  x, @; i    /* Initialize BSL */7 h) q; H2 T6 R/ J; j9 z% U
    EVMC6747_init( );1 b; \$ F& Z% X. ~
        /* Call evmc6747_intr function *// z3 X8 K3 O/ T2 v( ~! j
    aic3106_init( );% R4 B+ r5 H) W  H8 r
        while(1);( r2 [& z$ v( e6 F) u
}
$ r& F% [/ k2 A) N9 o. O, Y
( o, p% L& V$ M$ s& L
2 _9 p4 E& z  [7 `$ A3 r0 E  aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! ^, L" p7 g( Z/* Initialize MCASP1 */5 e3 u# ^) k8 T  ?
    mcasp = &MCASP_MODULE_1;5 o( B3 E! l) _# j# d" F4 b  R
    mcasp->regs->GBLCTL  = 0;       // Reset
0 u& U* D8 R3 S6 @$ @    mcasp->regs->RGBLCTL = 0;       // Reset RX
- ?3 d: _* O7 }3 P. C5 a2 X! p4 q+ @    mcasp->regs->XGBLCTL = 0;       // Reset TX  S7 r' B6 S. x! j
    mcasp->regs->PWRDEMU = 1;       // Free-running
4 N: x, T' i# H8 g1 Q2 s   // configure McASP0 receive registers
6 X# |5 y; X3 y    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used- O  w, @( t' e$ ^4 P
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 r$ ^8 f5 Y/ `" Z' e1 l! y
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
) \8 ^9 a% r1 f, d    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( p2 t" e6 X/ @) q/ F$ x
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)' J! i0 q/ D8 m
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,19 u2 v8 T) b3 H: j
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
8 |7 @, v; t' \( E) x) z  S  _! h    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  b7 Y6 c: P( n; S/ j: i1 ~& P' V: p% z$ E# Y% Z) [4 U
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 N: V; z7 D  {2 R! y8 N
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 J- U9 d& k/ @' m: R! \3 y. t; u    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 y% i) `! Y( z5 ~9 i& \    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! Q3 i3 }8 O" @
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
' R* ]2 h7 U9 l5 C6 M/ O    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
+ W5 C8 k; W% q: X' u8 j2 Y! H$ i    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
  |# T6 a4 y8 m: k& E    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ S2 h+ L; `6 o  x* r
7 T, r* e8 ^; B2 l- s) {2 u    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN) X/ F( o) r, l/ F- ~4 P! U; b
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT* O) q% L6 U" L  u
    mcasp->regs->PFUNC      = 0;          // All MCASPs
7 v* ?! D8 [* l  ]& W    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ E2 L! k- h) `+ x2 D
3 M9 i; g% H4 E. c& @4 B; j; M) y
    mcasp->regs->DITCTL     = 0x00000000; // Not used4 n3 B; S( T9 W- U  A
    mcasp->regs->DLBCTL     = 0x00000000; // Not used* I  l, r0 ~4 t. M& O
    mcasp->regs->AMUTE      = 0x00000000; // Not used
: F0 R2 ]6 r& Y
2 L- G" |7 z6 l& r& B) z/* Starting sections of the McASP*// O' c" }# R; t/ u' `: t; y7 J
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & _- Q1 Z% R3 c, d9 h3 q0 b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  5 v2 d- v  R/ U1 n2 T
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) M0 U9 G" n& j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
: U% ?' F* s. ~5 B2 s
( x4 i" ^8 X5 {' Z    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' M7 y7 C; K+ {& Y: _0 A( J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: Z3 H9 x  N7 @7 h; H* ~    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
1 T1 i! g, b% J0 k4 |8 ?  J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 ~2 W9 |2 u) K( H6 }' g- C* o! g+ [: Q
    mcasp->regs->XSTAT = 0x0000ffff; 5 X2 m+ T: T- ?( i  Q
    mcasp->regs->RSTAT = 0x0000ffff; / T- j; i- ]7 G$ }2 s; \

9 b8 D4 Y$ A; h( a    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, A1 g& s) S: h" I4 r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 b: A! G2 g$ Y- n+ l
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ b6 A2 O! d# }! d, g. m3 Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; l" {, u$ R' l0 Q# E/ M

" g4 j1 ]6 w+ Z  d5 c% l" {+ Z    /* Write a 0, so that no underrun occurs after releasing the state machine */
" w6 b/ _) j0 }5 M. v. ?    mcasp->regs->XBUF5 = 0;8 I7 G5 \! B; Z1 O9 W" G
    mcasp->regs->RBUF0 = 0;' h$ F- `% E( B/ Y3 W  \
; d" G" j  M! @6 {! b. Q0 |+ d) i7 y
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ A0 \0 T: Y/ {! m& k' V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% s4 N% S: \% A    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
4 k) k: }+ I6 {1 u& B+ x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );% w0 f6 j( k2 p

8 ?+ y* F& ^6 h# k% M/ U    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# a1 k, A  B& M; L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 e, g$ O: z2 K, K
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 m7 ^- {( O  B' Q0 F" U4 ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' J0 d" D! o( q  i# v9 Q8 n
& Y+ S) ]! B, D) w
    CSR = 0x0000;
; V& n  }4 Y3 h! A+ i    INTC_INTMUX1 = 0x3d;
$ w' W' w% @6 N* b6 q: i! U# Y' s* [    ISTP = (unsigned int)vectors;2 B& z* m- I5 U  v- H5 ?6 V
    ICR = 0xFFF0;  
! G0 v6 W* C0 I1 C+ V. X    IER |= 0x12;  
' z. v) t$ u! K' a! O5 w' P    CSR |= 0x01;  5 I( U0 I/ h. s% X. c
  {. s1 l0 e: R0 Z- d& t1 R
' m( X$ ?7 v- e9 i' b) q$ q  z

7 H! n$ J+ k) i$ M1 N0 T还有就是两个输入输出函数:
4 i% t+ J& E, ~5 b" Uvoid output_sample(Int32 out_data)
! a! i. e0 i) v( G{
3 G% g( Z9 `: w3 c$ |; R  AIC31_data.uint = out_data;  ' L3 G5 W* n; o; f1 L4 T8 C
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
' m9 P$ {" A1 G- y  e! g}
9 T5 d  H# q& _
/ V6 _' `7 G6 b& b+ Y0 KInt32 input_sample(void)$ Z! ^: ?% h" ?$ a' Z0 a# o# m
{  % c2 M0 b' ]# R8 j7 J
  AIC31_data.uint = MCASP1_RBUF0_32BIT;) d8 a9 [. M: z+ e3 j+ L' J
  return (AIC31_data.uint);
1 X( o6 M  ?! G9 R}6 J2 E! R9 |3 K: B: @& y, R

1 W4 P9 {  o  w+ {; h
分享到:  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-7 18:19 , Processed in 0.042955 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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